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函數只在內存中存有一份,而普通的函數在每次調用中都會維持一份拷貝
作爲一個開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是一個我的iOS交流羣:413038000,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經驗,討論技術, 大家一起交流學習成長!
以下資料在羣文件可自行下載!
作者:宇軒Simid
鏈接:https://www.jianshu.com/p/a177d4b793c7