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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

C语言学习及应用笔记之三:C语言const关键字及其使用

發(fā)布時(shí)間:2023/12/20 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言学习及应用笔记之三:C语言const关键字及其使用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  在C語(yǔ)言程序中,const關(guān)鍵字也是經(jīng)常會(huì)用到的一個(gè)關(guān)鍵字,那么使用const關(guān)鍵字的目的是什么呢?事實(shí)上,在程序中使用const關(guān)鍵字的主要目的就是為了向使用者傳遞設(shè)計(jì)者的一些意圖。

  事實(shí)上,無(wú)論我們是使用const關(guān)鍵字聲明變量還是聲明參數(shù),其目的都是為了告訴使用者這個(gè)變量或者參數(shù)的應(yīng)用目的。合理地使用關(guān)鍵字const 可以使編譯器有效地保護(hù)那些不希望被改變的變量或參數(shù),防止其無(wú)意中被代碼修改。所以使用const關(guān)鍵字可以避免一些不必要的錯(cuò)誤。

  我們已經(jīng)說明了const關(guān)鍵字的作用,接下來(lái)我們將更進(jìn)一步討論const關(guān)鍵字使用:

1const關(guān)鍵字修飾的變量

  ?const關(guān)鍵字最常見的用法就是修飾變量,使用const關(guān)鍵字修飾的變量可以認(rèn)為有只讀屬性。如:

  const int a=10;

  int b=0;

  b=a;? (I)這條語(yǔ)句是正確的

  a=b;? (II)這條語(yǔ)句是錯(cuò)誤的,編譯錯(cuò)誤,因?yàn)?/strong>a具有只讀屬性

  雖然const關(guān)鍵字修飾的變量具有只讀屬性,但絕不能將它簡(jiǎn)單的等價(jià)于常量。事實(shí)上C語(yǔ)言的const關(guān)鍵字修飾的變量?jī)H是語(yǔ)法上的常量。

  此外,使用const關(guān)鍵字修飾的變量,在聲明時(shí)必須進(jìn)行初始化。這是顯而易見的,既然是只讀的,當(dāng)然就得有一可供兌取的明確的值,而不是不確定的。例如:

  const int a=10;??? //合法用法

  const int a;????? //非法,導(dǎo)致編譯錯(cuò)誤

  另外需要注意的是,使用const關(guān)鍵字定義的變量是全局性的。所以在使用的時(shí)候需要注意。

  通常使用define定義一個(gè)宏,如:#define PI 3.1415976,以后無(wú)論在哪里需要使用圓周率時(shí),我們直接使用PI即可,而在編譯時(shí)預(yù)處理器會(huì)將所有的PI替換為3.1415976。這很方便,但是由于編譯器不會(huì)對(duì)其進(jìn)行檢查,如果使用不慎就會(huì)引入錯(cuò)誤,而且此種錯(cuò)誤很難發(fā)現(xiàn)。而且,我們也無(wú)法得到PI的地址,不能向PI傳遞指針或引用。

  為此,我們常使用const關(guān)鍵字修飾的變量來(lái)代替宏。使用const聲明的變量雖然增加了分配空間,但是可以保證類型安全,并且可以得到其指針。const消除了預(yù)處理器的值替代的不良影響,并且提供了良好的類型檢查形式和安全性,所以理解了const關(guān)鍵字,對(duì)我們的編程是有很大的幫助的。

2const關(guān)鍵字修飾的指針變量

  const關(guān)鍵字除了用來(lái)修飾普通變量外,還經(jīng)常用來(lái)修飾指針變量。當(dāng)然,在討論之前,我們需要搞清楚兩個(gè)概念:常量指針和指向常量的指針。所謂常量指針就是指針變量的值一旦初始化就不能改變,所以必須初始化。而所謂指向常量的指針就是其指向的值是一個(gè)常量的指針。

  在聲明指針變量時(shí),const關(guān)鍵字所處的位置,決定了其定義的指針變量的含義,例如我們定義:

  (a)int * const p; 該語(yǔ)句表示指向整形的常量指針?,它不能在指向別的變量,但指向(變量)的值可以修改。

  (b)const int * p; 該語(yǔ)句表示指向整形常量?的指針,它指向的值不能修改。

  (c)int const * p; 該語(yǔ)句與b的含義相同,表示指向整形常量?的指針,它指向的值不能修改。

  (d)const int *const p; 該語(yǔ)句表示指向整形常量?的常量指針?。它既不能再指向別的常量,指向的值也不能修改。

  (e)int const *const p; 該語(yǔ)句與d的含義相同,表示指向整形常量?的常量指針?。它既不能再指向別的常量,指向的值也不能修改。

  這寫定義容易讓人糊涂,但有一點(diǎn)技巧可以幫助我們理解。就是看const關(guān)鍵字的右邊跟著的是什么?當(dāng)const關(guān)鍵字的右邊是類型時(shí),則表示值是常量;當(dāng)const關(guān)鍵字的右邊是指針變量,則表示指針本身是常量。

3const關(guān)鍵字修飾的函數(shù)形參

  const關(guān)鍵字也經(jīng)常用來(lái)修飾函數(shù)的形參。關(guān)鍵字const修飾函數(shù)形參時(shí),通常用于參數(shù)為指針或引用的情況,且只能修飾輸入?yún)?shù)。若輸入?yún)?shù)采用“值傳遞”方式,由于函數(shù)將自動(dòng)產(chǎn)生臨時(shí)變量用于復(fù)制該參數(shù),該參數(shù)本就不需要保護(hù),所以不用const修飾。

  const關(guān)鍵字修飾函數(shù)輸入?yún)?shù)的形式如:void function(const ?int * a ); 或者void function(const ?int & a);都是可以的。在C標(biāo)準(zhǔn)庫(kù)中就很多這樣的應(yīng)用,例如字符串處理函數(shù):

  字符串拷貝函數(shù):char *strcpychar *strDestconst char *strSrc);

  返回字符串長(zhǎng)度函數(shù):int strlenconst char *str);

  以上兩個(gè)函數(shù)就是將源字符串使用const關(guān)鍵字保護(hù)起來(lái),防止不注意的修改改變了源字符串的值。

  佷顯然,采用const關(guān)鍵字修飾函數(shù)形參,就是為了保護(hù)輸入?yún)?shù)。在調(diào)用函數(shù)的時(shí)候,用相應(yīng)的變量初始化const常量,則在函數(shù)體中,按照const所修飾的部分進(jìn)行常量化,如形參為const int * a,則不能對(duì)傳遞進(jìn)來(lái)的指針?biāo)赶虻膬?nèi)容進(jìn)行改變,保護(hù)了原指針?biāo)赶虻膬?nèi)容;如形參為const int & a,則不能對(duì)傳遞進(jìn)來(lái)的引用對(duì)象進(jìn)行改變,保護(hù)了原對(duì)象的屬性。

4const關(guān)鍵字修飾的函數(shù)返回值

  const關(guān)鍵字有時(shí)候也會(huì)用來(lái)修飾函數(shù)的返回值,這種情況一般是用來(lái)修飾返回的指針或引用,保護(hù)指針指向的內(nèi)容或引用的內(nèi)容不被修改。例如:

  const char * function(void);

  這種用法比較少見,在此僅提及一下。

  綜上所述,const關(guān)鍵字不但強(qiáng)大,而且對(duì)我們的編程確實(shí)有很大的幫助,前提是我們真正的理解了它的用法。

歡迎關(guān)注:

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

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的C语言学习及应用笔记之三:C语言const关键字及其使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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