亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

解析C語言中如何正確使用const

2020-01-26 16:13:45
字體:
來源:轉載
供稿:網友

基本解釋
const是一個C語言的關鍵字,它限定一個變量不允許被改變。使用const在一定程度上可以提高程序的健壯性,另外,在觀看別人代碼的時候,清晰理解const所起的作用,對理解對方的程序也有一些幫助。
雖然這聽起來很簡單,但實際上,const的使用也是c語言中一個比較微妙的地方,微妙在何處呢?請看下面幾個問題。

問題: const變量 & 常量
為什么我象下面的例子一樣用一個const變量來初始化數組,ANSI C的編譯器會報告一個錯誤呢?
const int n = 5;
int a[n];

答案與分析:
1)、這個問題討論的是“常量”與“只讀變量”的區別。常量肯定是只讀的,例如5, “abc”,等,肯定是只讀的,因為程序中根本沒有地方存放它的值,當然也就不能夠去修改它。而“只讀變量”則是在內存中開辟一個地方來存放它的值,只不過這個值由編譯器限定不允許被修改。C語言關鍵字const就是用來限定一個變量不允許被改變的修飾符(Qualifier)。上述代碼中變量n被修飾為只讀變量,可惜再怎么修飾也不是常量。而ANSI C規定數組定義時維度必須是“常量”,“只讀變量”也是不可以的。

2)、注意:在ANSI C中,這種寫法是錯誤的,因為數組的大小應該是個常量,而const int n,n只是一個變量(常量 != 不可變的變量,但在標準C++中,這樣定義的是一個常量,這種寫法是對的),實際上,根據編譯過程及內存分配來看,這種用法本來就應該是合理的,只是 ANSI C對數組的規定限制了它。

3)、那么,在ANSI C 語言中用什么來定義常量呢?答案是enum類型和#define宏,這兩個都可以用來定義常量。

問題: const變量 & const 限定的內容
下面的代碼編譯器會報一個錯誤,請問,哪一個語句是錯誤的呢?
typedef char * pStr;
char string[4] = "abc";
const char *p1 = string;
const pStr p2 = string;
p1++;
p2++;

答案與分析:
問題出在p2++上。
1)、const使用的基本形式: const char m;
限定m不可變。
2)、替換1式中的m, const char *pm;
限定*pm不可變,當然pm是可變的,因此問題中p1++是對的。
3)、替換1式char, const newType m;
限定m不可變,問題中的charptr就是一種新類型,因此問題中p2不可變,p2++是錯誤的。

問題: const變量 & 字符串常量
請問下面的代碼有什么問題?
char *p = "i'm hungry!";
p[0]= 'I';

答案與分析:
上面的代碼可能會造成內存的非法寫操作。分析如下, “i'm hungry”實質上是字符串常量,而常量往往被編譯器放在只讀的內存區,不可寫。p初始指向這個只讀的內存區,而p[0] = 'I'則企圖去寫這個地方,編譯器當然不會答應。

問題: const變量 & 字符串常量2
請問char a[3] = "abc" 合法嗎?使用它有什么隱患?

答案與分析:
在標準C中這是合法的,但是它的生存環境非常狹??;它定義一個大小為3的數組,初始化為“abc”,,注意,它沒有通常的字符串終止符 '/0',因此這個數組只是看起來像C語言中的字符串,實質上卻不是,因此所有對字符串進行處理的函數,比如strcpy、printf等,都不能夠被使用在這個假字符串上。

問題: const & 指針
類型聲明中const用來修飾一個常量,有如下兩種寫法,那么,請問,下面分別用const限定不可變的內容是什么?

1)、const在前面
const int nValue; //nValue是const
const char *pContent; //*pContent是const, pContent可變
const (char *) pContent;//pContent是const,*pContent可變
char* const pContent; //pContent是const,*pContent可變
const char* const pContent; //pContent和*pContent都是const

2)、const在后面,與上面的聲明對等
int const nValue; // nValue是const
char const * pContent;// *pContent是const, pContent可變
(char *) const pContent;//pContent是const,*pContent可變
char* const pContent;// pContent是const,*pContent可變
char const* const pContent;// pContent和*pContent都是const

答案與分析:
const和指針一起使用是C語言中一個很常見的困惑之處,在實際開發中,特別是在看別人代碼的時候,常常會因為這樣而不好判斷作者的意圖,下面講一下我的判斷原則:
沿著*號劃一條線,const和誰在一邊,那么誰就是const,即const限定的元素就是它。你可以根據這個規則來看上面聲明的實際意義,相信定會一目了然。
另外,需要注意:對于const (char *) ; 因為char *是一個整體,相當于一個類型(如 char),因此,這是限定指針是const。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久亚洲影视| 国产伦精品免费视频| 亚洲成人xxx| 97国产真实伦对白精彩视频8| 欧美性猛交xxxx| 日韩av男人的天堂| 亚洲人av在线影院| 欧美精品福利在线| 精品免费在线观看| 国产欧美久久一区二区| 国产精品免费久久久| 中文字幕亚洲精品| 国产日韩在线一区| 91中文字幕在线观看| 国产精品久久久久久久久男| 欧美日韩爱爱视频| 九九久久久久99精品| 日韩av不卡在线| 亚洲国产精品人人爽夜夜爽| 久久免费精品视频| 亚洲综合大片69999| 国产精品久久久久久久7电影| 日韩av毛片网| 永久555www成人免费| 亚洲色图50p| 国产精品日日摸夜夜添夜夜av| 性色av一区二区三区免费| 亚洲午夜久久久影院| 色先锋久久影院av| 欧美另类老女人| 成人亚洲欧美一区二区三区| 欧美国产第二页| 久久久久久国产| 精品视频—区二区三区免费| 精品露脸国产偷人在视频| 国产97在线视频| 欧美黑人xxx| 日韩亚洲综合在线| 亚洲欧美日韩在线一区| 欧美高清电影在线看| 91国产高清在线| 成人网在线观看| 亚洲精品久久久久| 欧美孕妇与黑人孕交| 国产福利精品视频| 韩国美女主播一区| 国产99久久精品一区二区永久免费| 色偷偷888欧美精品久久久| 日本道色综合久久影院| 欧美成年人视频网站欧美| 欧美性猛交xxxxx水多| 色偷偷偷综合中文字幕;dd| 国产美女久久精品| 成人免费视频网| 欧美国产日本高清在线| 亚洲国产中文字幕久久网| 国内精品一区二区三区| 国产在线观看一区二区三区| 亚洲国产欧美在线成人app| 久久国产精品久久久久久久久久| 日韩天堂在线视频| 狠狠色噜噜狠狠狠狠97| 日韩欧美中文在线| 国产欧美日韩专区发布| 国产成人啪精品视频免费网| 日韩欧美精品网址| 国产精品免费小视频| 91免费看片在线| 国产亚洲欧洲黄色| 亚洲视频在线免费观看| 久久亚洲影音av资源网| 欧美激情网友自拍| 国产一区二区三区视频在线观看| 亚洲欧美激情在线视频| 亚洲美女视频网| 国产精品女主播| 国产精品久久综合av爱欲tv| 性视频1819p久久| 日韩在线观看免费高清完整版| 欧美激情极品视频| 欧美成人手机在线| 中文字幕精品—区二区| 欧美大胆在线视频| 欧美精品18videos性欧| 久久男人资源视频| 日韩在线观看成人| 一区二区欧美在线| 亚洲欧美国产精品专区久久| 69国产精品成人在线播放| 91亚洲精品视频| 色琪琪综合男人的天堂aⅴ视频| 国产一区二区三区欧美| 精品福利在线视频| 欧美另类极品videosbest最新版本| 成人在线视频网| 亚洲女性裸体视频| 一区三区二区视频| 欧美第一页在线| 久久亚洲精品毛片| 国产高清在线不卡| 久久精品国产91精品亚洲| 欧美大秀在线观看| 播播国产欧美激情| 亚洲国产日韩欧美在线99| 国产色视频一区| 国产专区欧美专区| 久久久久久国产精品美女| 日韩精品久久久久久久玫瑰园| 成人在线播放av| 久久久久久亚洲精品| 久久久精品视频在线观看| 欧美日韩国产精品一区二区不卡中文| 亚洲欧美日韩精品久久亚洲区| 亚洲伊人一本大道中文字幕| 欧美日韩国产专区| 亚洲欧美国内爽妇网| 国产成人亚洲综合91精品| 亚洲人午夜色婷婷| 不卡av电影院| 精品视频一区在线视频| 奇米四色中文综合久久| 精品亚洲男同gayvideo网站| 国产国语videosex另类| 国产精品白嫩美女在线观看| 欧美床上激情在线观看| 亚洲系列中文字幕| 亚洲精品第一国产综合精品| 国产精品av电影| 亚洲美女在线看| 欧美日韩在线看| 久久深夜福利免费观看| 亚洲精品国产品国语在线| 欧洲成人性视频| 激情懂色av一区av二区av| 中文字幕亚洲欧美| 欧美日韩免费区域视频在线观看| 日韩69视频在线观看| 日韩亚洲综合在线| 亚洲最大av网站| 91精品中文在线| 精品丝袜一区二区三区| 精品国产户外野外| 欧美影院在线播放| 久久手机精品视频| 成人免费淫片视频软件| 欧洲一区二区视频| 亚洲第五色综合网| 亚洲福利视频网| 亚洲国产精品久久久久秋霞蜜臀| 欧美在线视频网站| 久久91精品国产91久久久| 亚洲激情小视频| 在线观看亚洲区| 久久久精品久久久久| 亚洲区bt下载| 欧美性极品xxxx做受| 国产精品丝袜久久久久久不卡| 美女性感视频久久久| 日韩欧美在线视频日韩欧美在线视频| 欧美在线视频在线播放完整版免费观看| 中文字幕日韩在线视频| 欧美精品videofree1080p| 日韩精品视频在线观看免费| 国产精品第3页|