日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

03 - const static extern

發(fā)布時間:2023/12/10 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 03 - const static extern 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

const是一個C語言的關(guān)鍵字,它限定一個變量不允許被改變。使用const可以在一定程度上提高程序的安全性和可靠性,再者在看別人的代碼作品的時候也可以有助于清晰理解const所起的作用。

?

1、const和#define的區(qū)別

  (1)編譯器處理的方式不相同

  define定義的宏是在預(yù)處理階段展開的,而const定義的常量則是在編譯階段使用的

  (2)類型和安全檢查不同

  define宏沒有類型,并且不做任何的類型檢查,僅僅是展開

  const常量具有具體的類型,在編譯階段會執(zhí)行類型檢查

  (3)存儲方式不同

   define定義的宏替換是在編譯前完成,并且有多少地方使用,就會出現(xiàn)多少個臨時常量的內(nèi)存,并不會分配內(nèi)存

   const常量會在內(nèi)存中分配

 2、const變量vs常量

  常量,例如5和“abc”等,肯定是只讀的,因為常量是被編譯器放在內(nèi)存中的只讀區(qū)域,當(dāng)然不能夠去修改。而只讀變量則是在內(nèi)存中開辟一個地方來存放它的值,只不過這個值不允許被修改。C語言關(guān)鍵字const就是用來限定一個變量不允許被改變的修飾符。

const int n = 5;   int a[n];

  在上面的這個例子當(dāng)中,雖然變量n被修飾為一個只讀變量,但是并不是常量,而數(shù)組定義的時候,規(guī)定數(shù)組長度必須是常量,所以會報錯。也就是說,常量并不等于不可變的變量

 3、const來限定內(nèi)容 

1 typedef char * pStr;    2 char string[4] = "abc";   3 const char *p1 = string; //1式    4 const pStr p2 = string; //2式    5 p1++;    6 p2++;

const使用的基本形式是:

const type m;  // 限定m不可變。

  在第3行代碼中const這個關(guān)鍵詞修飾的是*p1,所以*p1是不可變的,但是p1是可變的,所以p1++是沒有問題的

  在第4行代碼中,const修飾的是p2,所以p2是不可變的,也就是說第6行的代碼是錯誤的。

4、const vs指針

  1)const在前面

1 const int nValue; // nValue是const 2 const char *pContent; // *pContent是const, pContent可變 3 const char* const pContent; // pContent和*pContent都是const

  2)const在后面

1 int const nValue; // nValue是const 2 char const * pContent; // *pContent是const, pContent可變 3 char* const pContent; // pContent是const,*pContent可變 4 char const* const pContent; // pContent和*pContent都是const

 1)和2)所做的聲明是一樣的效果

  例子: 

int const * p1,p2;

  在這里p2是const修飾的,而(*p1)是作為一個整體收到const修飾的。換句話說,也就是p1是可變的。在這個例子當(dāng)中,p1是指向整形的指針,

?

——指針指向的變量不可變,但是指向可以改變

1   int x = 1; 2   int y = 2; 3   const int* px = &x;  int const* px = &x; //這兩句表達式一樣效果 4   px = &y; //正確,允許改變指向 5   *px = 3; //錯誤,不允許改變指針指向的變量的值

——指針指向的變量的值可以改變,指向不變

  

1    int x = 1; 2   int y = 2; 3   int* const px = &x; 4    px = &y; //錯誤,不允許改變指針指向 5   *px = 3; //正確,允許改變指針指向的變量的值

——指針指向的變量不可變,指向不可變

   int x = 1;int y = 2;const int* const px = &x;  int const* const px = &x;px = &y; //錯誤,不允許改變指針指向*px = 3; //錯誤,不允許改變指針指向的變量的值

?

5、在定義宏的時候,也可以使用const來進行定義

  在定義宏的時候,也可以使用const來進行定義宏,但是要注意一些問題。比如說,如果把const修飾的宏全部放到pch文件當(dāng)中的話,會造成,項目中所有的.m文件中都會有這段聲明,產(chǎn)生重讀定義的問題,解決辦法就是重新新建一個.h 和.m文件,然后在.m中定義常量,然后在.h中用extern關(guān)鍵字進行引用就可以了

例如:

——在.m文件中做如下定義:

1 NSString * const HWAppKey = @"3235932662"; 2 NSString * const HWRedirectURI = @"http://www.baidu.com"; 3 NSString * const HWAppSecret = @"227141af66d895d0dd8baca62f73b700"; 4 NSString * const HWMyAge = @"20";

——在.h文件當(dāng)中用extern關(guān)鍵字進行引用

1 extern NSString * const HWAppKey; 2 extern NSString * const HWRedirectURI; 3 extern NSString * const HWAppSecret; 4 extern NSString * const HWMyAge;

  在用到這些聲明的全局變量的時候只要包含這個文件的頭文件即可。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {static NSString *ID = @"cell";UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];if (!cell) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];}cell.textLabel.text = [NSString stringWithFormat:@"第%ld行數(shù)據(jù)",indexPath.row];return cell;}

在使用tableViewCell 的時候經(jīng)常會出現(xiàn)上述的寫法,并且會定義一個static變量,這個變量在編譯期會對這個變量進行初始化賦值,也就是說這個變量要么是nil要么就是在定義初期的時候?qū)ζ溥M行賦值,一般情況下,只能用NSString或者是基本類型。

static修飾的變量存儲在內(nèi)存中的靜態(tài)存儲區(qū),這塊內(nèi)存在程序的運行期間都會存在。所以保證了static變量的唯一性和持久性。

——static變量不能寫在interface里面,會直接報錯。static變量只能放在方法里面或者放在implementation外面(通常放在implementation文件開始處),

#import "Printer.h"static int pageCount;@implemenation Printer...@end

簡單的來說,const是靜態(tài)變量,在聲明過后即存在在內(nèi)存中的特殊位置,下次使用的時候,從該內(nèi)存中讀取上次的存儲的值

?

?

參考:

http://blog.163.com/fuxiaohui@126/blog/static/13174582620139319928864/

轉(zhuǎn)載于:https://www.cnblogs.com/SH9186ios/p/4649238.html

總結(jié)

以上是生活随笔為你收集整理的03 - const static extern的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产无遮挡又黄又爽又色 | 亚洲人成77777 | 国产乱码视频 | 老司机深夜福利网站 | 日本福利一区二区三区 | 亚洲视频观看 | 亚洲成人一区二区 | 亚洲乱色熟女一区二区三区 | 国产精品久久一区二区三区 | 欧美性生交xxxxx | 日韩欧美不卡在线 | 色老大影院 | 国产超碰人人模人人爽人人添 | 东方影库av | 老司机午夜影院 | 日本国产精品一区 | 久久先锋| 久久久久久久久免费看无码 | 一级黄色大片免费看 | 亚洲第一二三区 | 亚洲欧美日韩另类 | 免费一级网站 | 人人狠狠综合久久亚洲 | 美女乱淫 | 啪啪福利视频 | 伊人伊人伊人伊人 | 亚洲国产剧情 | 日韩欧美国产电影 | 台湾佬中文在线 | 久久精品一区二区三区黑人印度 | av不卡网站| 成人欧美一区二区三区黑人一 | 在线无遮挡 | 国产精品蜜臀av | 国产永久精品大片wwwapp | 免费毛片一区二区三区久久久 | 欧美一区二区三区成人 | 四虎影 | 成人3d动漫一区二区三区91 | 成人一级在线 | 国产在线观看 | 久久久极品 | 精品少妇一区二区三区 | 免费黄色在线网址 | 我要看免费的毛片 | 337p亚洲精品色噜噜噜 | 国产又黄又粗又长 | 美脚の诱脚舐め脚视频播放 | 日本v片| 殴美性生活| www天天操| 国产丰满果冻videossex | 男受被做哭激烈娇喘gv视频 | 一区二区三区视频免费 | 国产精品午夜无码专区 | 欧美风情第一页 | 99国产精品99 | 亚洲国产99 | 激情综合av | 国产精品乱码久久久久久久久 | 毛片毛多水多 | 国内毛片毛片毛片 | 亚洲免费观看高清完整 | 激情欧美一区二区三区 | 丁香五香天堂网 | 欧洲天堂网 | 欧美a级免费 | 成人一区三区 | 久久mm| 欧美日韩在线免费视频 | 色老头在线观看 | 日韩在线精品视频一区二区涩爱 | 久久久综合网 | 无遮挡毛片 | 久久精品视频91 | 一区二区三区www污污污网站 | 日韩激情网| 99久久久无码国产精品性 | 97免费观看视频 | 97超碰人人 | 丝袜制服中文字幕 | 精品九九九九 | 91久久国产视频 | 黄色片网站国产 | 国产ts三人妖大战直男 | 国产91精品久久久久 | 五月天免费网站 | 正在播放老肥熟妇露脸 | 善良的女朋友在线观看 | 欧美在线免费播放 | 牛牛av国产一区二区 | 狠狠插狠狠干 | 国产高清在线视频观看 | 欧美 日韩 国产 在线 | 30一40一50老女人毛片 | 黑人借宿巨大中文字幕 | 好屌妞视频这里有精品 | 日美韩av| 婷婷伊人 |