define 定義的宏指令尚辑,程序是在預處理階段將#define定義的宏與內(nèi)容進行替換嗓节,因此在程序運行時,內(nèi)存的常量區(qū)是沒有#define定義的宏的,系統(tǒng)并不給他分配內(nèi)存爽彤,而且在編譯的時候也不會檢查數(shù)據(jù)類型,出錯的可能性大缚陷。
const 定義的常量适篙,是在內(nèi)存的常量區(qū)中的,系統(tǒng)會為他分配內(nèi)存箫爷,在編譯的時候會檢查數(shù)據(jù)類型嚷节。
另外:#define 注意邊緣效應:
define N 2 + 3 // 這樣定義
int a = N / 2; // 預想結(jié)果應該是2, 但結(jié)果卻是3
附:
static 所定義的變量都是靜態(tài)變量虎锚,存在于內(nèi)存靜態(tài)區(qū)域硫痰,而所有未被初始化的靜態(tài)變量系統(tǒng)都會給初始化為0.地址為0x00,而且只初始化一次窜护。static控制了變量的作用范圍效斑。
全局變量和static變量都在內(nèi)存靜態(tài)區(qū)
static 關鍵字區(qū)別:
static全局變量和普通的全局變量的區(qū)別:static的全局變量只初始化一次,防止在其他的類文件中被使用柱徙。
static局部變量和普通的局部變量的區(qū)別:static的局部變量只初始化一次缓屠,下一次依據(jù)上一次的結(jié)果,因為內(nèi)存地址就一份护侮。
static函數(shù)與普通函數(shù)的區(qū)別:static函數(shù)只在內(nèi)存中存有一份敌完,而普通的函數(shù)在每次調(diào)用中都會維持一份拷貝