static vs const vs define

前言:說實在的,基礎是最重要的,而我是一個經常忘記基礎的人,所以,每次發現自己忘了或者不了解就會重新回去看一下基礎,痛并快樂著,誰叫我蠢呢?人蠢就應該多讀書。廢話不多說,下面說說對這幾個蛋疼的關鍵詞的理解,僅一家之言,不服可以來辯。??

1.static

static就是靜態變量,內存只被分配一次,存放在靜態變量區。
(1)不僅可以修飾變量,還可以修飾函數

static void testStaticVar() {
    static NSInteger count = 5;
    count++;
    NSLog(@"count: %ld", count);
}

(2)在調用過程中其值維持不變

static void testStaticVar() {
    static NSInteger count = 5;
    count++;
    NSLog(@"count: %ld\n", count);
    NSInteger count2 = 5;
    count2++;
    NSLog(@"count2: %ld\n", count2);
}

for (NSInteger index = 0; index < 5; index++) {
            testStaticVar();
        }

//輸出結果
//靜態變量count的數值一直往上加,局部變量count2的數值一直為6
2017-02-27 14:55:59.669256 BasicTest[6090:433023] count: 6
2017-02-27 14:55:59.670135 BasicTest[6090:433023] count2: 6
2017-02-27 14:55:59.670185 BasicTest[6090:433023] count: 7
2017-02-27 14:55:59.670198 BasicTest[6090:433023] count2: 6
2017-02-27 14:55:59.670207 BasicTest[6090:433023] count: 8
2017-02-27 14:55:59.670238 BasicTest[6090:433023] count2: 6
2017-02-27 14:55:59.670253 BasicTest[6090:433023] count: 9
2017-02-27 14:55:59.670288 BasicTest[6090:433023] count2: 6
2017-02-27 14:55:59.670298 BasicTest[6090:433023] count: 10
2017-02-27 14:55:59.670306 BasicTest[6090:433023] count2: 6

(3)限定作用域

\\在模塊內聲明的變量可以被模塊內所有函數訪問,但不能被模塊外其他函數訪問
\\如果是非靜態全局變量,可以加上extern關鍵字暴露出來,模塊外也能訪問

2.const

1.只讀屬性,修飾的右邊變量只讀,不能修改
2.編譯期間處理,會做錯誤檢查,不能定義函數,只能修飾變量
3.作用域不限于本文件,外部也可以訪問
4.可以節省空間,避免不必要的內存分配(const定義常量只給出對應的內存地址)
5.提高了效率(編譯器通常不為普通const常量分配儲存空間,而是將它們保存在符號表,成為一個編譯常量,沒有存取操作,效率高)

Tips:const修飾的是右邊變量,把類型去掉就是const的修飾變量

const int a;
int const a;
//去掉類型const修飾的都是a,所以以上的寫法效果一樣

int *const p;      //指針p不能改變
const int *p;      //*p不能改變

const int *const p;    //指針p不能改變,指針指向的內容*p也不能改變

3.define

1.編譯前處理
2.直接替換參數,不做類型錯誤檢查
3.可以定義常量和函數

#define P_I 3.14
#define sum(x, y) ((x)*(y))

CGFloat pi = P_I;
NSInteger sum = sum(3, 4);
NSLog(@"PI: %lf----sum(3, 4) = %ld", pi, sum);

//輸出結果
2017-02-27 15:23:04.352012 BasicTest[6174:445944] PI: 3.140000----sum(3, 4) = 12

4.總結

雖然是一些基礎,但是可能以后會用上,誰知道呢???

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容