static和const的使用

static

  • 修飾局部變量

    • 讓局部變量只初始化一次
    • 局部變量在程序中只有一份內(nèi)存
    • 并不會(huì)改變局部變量的作用域,僅僅是改變了局部變量的生命周期(只到程序結(jié)束,這個(gè)局部變量才會(huì)銷(xiāo)毀)
  • 修飾全局變量

    • 全局變量的作用域僅限于當(dāng)前文件

const

  • 沒(méi)有const修飾的指針
    • 指針p和*p都能被修改
    // 定義一個(gè)指針變量
    int *p = NULL;

    // 定義2個(gè)int類(lèi)型的變量
    int a = 10;
    int b = 30;

    // p指向a
    p = &a;
    *p = 20;

    // p指向b
    p = &b;
    *p = 40;

    NSLog(@"%d %d", a, b);
  • const修飾的*p
    • 被const修飾的*p只能被賦值一次,以后不能賦值,否則編譯器報(bào)錯(cuò)
    // const修飾的*p
    const int *p = NULL;
    int const *p = null;

    *p = 20; // 編譯器報(bào)錯(cuò),不能修改*p的值
  • const修飾的p
    • 被const修飾的p只能存一次地址,以后再也不能其它存地址了,否則編譯器報(bào)錯(cuò)
    // const修飾的指針變量p
    int * const p = NULL;
    int a = 20;

    p = &a; // 編譯器報(bào)錯(cuò),不能修改指針變量p
  • const在聲明字符串的用法
    NSString * const ZMJName = @"jack";

static和const聯(lián)合使用

  • static將一個(gè)全局變量變成局部變量
  • const將一個(gè)局部變量變成局部常量
    // 定義了一個(gè)局部常量
    static const CGFloat ZMJRed = 0.4;
    static const CGFloat ZMJGreen = 0.6;
    static const CGFloat ZMJBlue = 0.7;

使用static const 與 #define

  • 使用static const修飾變量和宏定義的比較
    • 相同點(diǎn)
      • 都不能再被修改
      • 一處修改,其它都改了
    • 不同點(diǎn)
      • static const修飾變量只有一份內(nèi)存
      • 宏定義,只是簡(jiǎn)單的替換,每次使用都需要?jiǎng)?chuàng)建一份內(nèi)存
  • 結(jié)論
    • 使用static const修飾更加高效,在同一個(gè)文件內(nèi)可以使用static const取代#define
    // static const修飾變量只有一份內(nèi)存
    static const CGFloat ZMJRed = 0.4;

    // 宏定義,只是用0.4替換ZMJRed,每次使用都需要?jiǎng)?chuàng)建一份內(nèi)存
    #define ZMJRed 0.4

const實(shí)際開(kāi)發(fā)的應(yīng)用

  • 一般會(huì)先新建ZMJConst.h文件專(zhuān)門(mén)存放常量的引用
// 引用某變量,如果沒(méi)有使用const修飾,就不能直接在編譯的時(shí)候就能檢測(cè)是否修改了ZMJRed
extern const CGFloat ZMJRed;
extern NSString * const ZMJName;
- 可以模仿系統(tǒng)UIKIT_EXTERN來(lái)代替extern,逼格更高!
UIKIT_EXTERN const CGFloat ZMJRed;
UIKIT_EXTERN NSString * const ZMJName;
  • 一般會(huì)新建ZMJConst.m文件專(zhuān)門(mén)存放static const修飾的變量,需要用的時(shí)候?qū)腩^文件就可以了。
// 定義了整個(gè)程序都能訪問(wèn)的常量
const CGFloat ZMJRed = 0.4;
NSString * const ZMJName = @"jack";
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • static 修飾局部變量 讓局部變量只初始化一次 局部變量在程序中只有一份內(nèi)存 并不會(huì)改變局部變量的作用域,僅僅...
    大沖哥閱讀 1,394評(píng)論 0 1
  • 一、const與宏的區(qū)別: const簡(jiǎn)介:之前常用的字符串常量,一般是抽成宏,但是蘋(píng)果不推薦我們抽成宏,推薦我們...
    CoderZS閱讀 321評(píng)論 0 4
  • 宏的使用: 它在項(xiàng)目中常見(jiàn)的使用方式有兩種: 一,常用的字符串或者常量抽成宏 比如在項(xiàng)目該文件中多次使用到255這...
    獻(xiàn)國(guó)閱讀 377評(píng)論 0 0
  • 注:這是第三遍讀《C語(yǔ)言深度解剖》,想想好像自從大學(xué)開(kāi)始就沒(méi)讀完過(guò)幾本書(shū),其中譚浩強(qiáng)的那本《C語(yǔ)言程序設(shè)計(jì)(第四版...
    HavenXie閱讀 1,765評(píng)論 1 6
  • 芙蓉一片緋紅,意重重,銀桂黃菊紅槿、色妍隆。 紅梅漫,池荷干,友相逢,同賞園林品位、嘆神工。
    晴鶴1閱讀 427評(píng)論 12 7