define 定義的宏指令,程序是在預處理階段將#define定義的宏與內容進行替換,因此在程序運行時,內存的常量區是沒有#define定義的宏的,系統并不給他分配內存,而且在編譯的時候也不會檢查數據類型,出錯的可能性大。
const 定義的常量,是在內存的常量區中的,系統會為他分配內存,在編譯的時候會檢查數據類型。
另外:#define 注意邊緣效應:
define N 2 + 3 // 這樣定義
int a = N / 2; // 預想結果應該是2, 但結果卻是3
附:
static 所定義的變量都是靜態變量,存在于內存靜態區域,而所有未被初始化的靜態變量系統都會給初始化為0.地址為0x00,而且只初始化一次。static控制了變量的作用范圍。
全局變量和static變量都在內存靜態區
static 關鍵字區別:
static全局變量和普通的全局變量的區別:static的全局變量只初始化一次,防止在其他的類文件中被使用。
static局部變量和普通的局部變量的區別:static的局部變量只初始化一次,下一次依據上一次的結果,因為內存地址就一份。
static函數與普通函數的區別:static函數只在內存中存有一份,而普通的函數在每次調用中都會維持一份拷貝