0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎樣去使用C語(yǔ)言中的const關(guān)鍵字呢

冬至配餃子 ? 來(lái)源:最后一個(gè)bug ? 作者:bug菌 ? 2022-08-12 09:13 ? 次閱讀

/***const是什么?***/

C語(yǔ)言中const是一個(gè)關(guān)鍵字,const字面的意思是“恒定的,不變的”,其主要的作用是const定義的變量,但又相當(dāng)于常量,其值不允許被改變。

值得注意的是:

1)const修飾的變量的
生存周期為其定義到整個(gè)程序結(jié)束運(yùn)行,不管是全局變量還是局部變量。

2)對(duì)于const變量在
初始化的時(shí)候就需要進(jìn)行按我們的期望進(jìn)行賦值,其他時(shí)候修改則會(huì)造成語(yǔ)法錯(cuò)誤。

3)對(duì)于
const特性跟編譯器相關(guān),不過(guò)大部分是一致的!

4)const是在
編譯的時(shí)候編譯器進(jìn)行的一些處理!

/***如何使用const?***/

一、C語(yǔ)言中const修飾的變量占用內(nèi)存

我們先看加兩個(gè)例子:

下圖C語(yǔ)言

pYYBAGL1qK6AQjmdAABt1-vJyvw190.png

下圖C++語(yǔ)言

poYBAGL1qMSAWll7AAB4Amh5CzA508.png

我們編譯會(huì)發(fā)現(xiàn)C語(yǔ)言無(wú)法通過(guò),主要是原因是我們定義const變量n并不是常量所以編譯無(wú)法通過(guò)。所以用const定義的變量?jī)H僅為只讀變量,同樣需要占用內(nèi)存。而C++可以通過(guò),而它相對(duì)比較復(fù)雜,這里不在展開(kāi)描述!

二、const注釋函數(shù)參數(shù)和返回值

我們通過(guò)修飾函數(shù)形參來(lái)保護(hù)傳入的參數(shù)不被意外修改,有利于程序穩(wěn)定性。我們一般不會(huì)用const修飾值傳遞,因?yàn)橹祩鬟f是一個(gè)賦值的過(guò)程,在函數(shù)內(nèi)部修改不會(huì)改變其值,所以不是很有意義;一般用const注釋指針傳遞,防止內(nèi)部修改導(dǎo)致外部變化,比如:void sFuc(const char *des,const char *src);這樣就防止了des和src值的意外修改。

修飾返回值一般用得比較少,采用const修飾返回值一般也不用于值傳遞,而是多用于指針傳遞!


三、const變量能通過(guò)指針修改嗎?

我們通過(guò)下面兩個(gè)例子:

pYYBAGL1qOGASIW4AAExAvqRXnQ540.png

我們會(huì)發(fā)現(xiàn)兩者的區(qū)別const一個(gè)注釋的全局變量一個(gè)注釋的局部變量,我們編譯都能通過(guò),不過(guò)使用全部變量的程序運(yùn)行會(huì)報(bào)段錯(cuò)誤,而局部變量的能夠過(guò)得正確結(jié)果。對(duì)于通過(guò)指針修改const的值是一種與編譯器有關(guān)的行為,我們認(rèn)為可以用指針修改堆棧上的局部變量,而全部變量const修飾以后為只讀區(qū)域,如果程序訪(fǎng)問(wèn)則會(huì)導(dǎo)致異常!

四、const注釋指針的終極奧義

我們把const處把右側(cè)的語(yǔ)句括起來(lái),去掉數(shù)據(jù)類(lèi)型,括起來(lái)的內(nèi)容是什么就是什么不能被修改。

如:

1)const int *pVar=&addr;根據(jù)上面的方法括起來(lái)的內(nèi)容(* pVar)表示的是指針的內(nèi)容,那么不能執(zhí)行*pVar內(nèi)容的修改,比如說(shuō)*pVar=123;則編譯會(huì)報(bào)錯(cuò)。不過(guò)可以修改指針的地址,比如pVar = &addr2;這樣是可以修改的并且我們?cè)俅卧L(fǎng)問(wèn)pVar的內(nèi)容則變成了addr2的內(nèi)容了。

2)同樣intconst *pVar=&addr;跟上面是一樣的處理辦法。

3)int* const pVar=&addr;這個(gè)剛剛與前面的相反,其括起來(lái)的為(pVar)所以值能使用*pVar作為左值,不能修改pVar所指向的地址。

4)對(duì)于constint* constpVar=&addr則都不可進(jìn)行修改!只能作為右值可讀。

5)我們同樣可以擴(kuò)展下對(duì)于二級(jí)指針

constchar*const*constp全部限定為只讀,都不可以改寫(xiě),如果一個(gè)開(kāi)放對(duì)應(yīng)的就可以被修改!


審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5083

    文章

    19131

    瀏覽量

    305551
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7605

    瀏覽量

    136938
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1634

    瀏覽量

    49144
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言關(guān)鍵字分別發(fā)生在哪個(gè)階段

    在編譯的第一個(gè)階段:預(yù)處理,對(duì)一些宏定義做替換。 第二個(gè),const。 C語(yǔ)言中const 用于修飾只讀變量,表示變量本身不能修改。 這個(gè)關(guān)鍵字
    的頭像 發(fā)表于 11-24 10:31 ?190次閱讀

    C語(yǔ)言中的socket編程基礎(chǔ)

    Socket編程簡(jiǎn)介 Socket是一種通信機(jī)制,允許程序之間進(jìn)行通信。在C語(yǔ)言中,socket編程是網(wǎng)絡(luò)編程的基礎(chǔ)。通過(guò)使用socket,程序可以發(fā)送和接收數(shù)據(jù),實(shí)現(xiàn)不同計(jì)算機(jī)之間的通信
    的頭像 發(fā)表于 11-01 16:51 ?337次閱讀

    C語(yǔ)言關(guān)鍵字--typedef

    C語(yǔ)言關(guān)鍵字使用方法學(xué)習(xí)指南!
    的頭像 發(fā)表于 10-07 12:44 ?270次閱讀

    使用邊緣AI和Sitara處理器進(jìn)行關(guān)鍵字檢測(cè)

    電子發(fā)燒友網(wǎng)站提供《使用邊緣AI和Sitara處理器進(jìn)行關(guān)鍵字檢測(cè).pdf》資料免費(fèi)下載
    發(fā)表于 09-02 11:30 ?0次下載
    使用邊緣AI和Sitara處理器進(jìn)行<b class='flag-5'>關(guān)鍵字</b>檢測(cè)

    c語(yǔ)言中從左到右結(jié)合怎么看

    C語(yǔ)言中,操作符的結(jié)合性(Associativity)是指當(dāng)操作符在表達(dá)式中連續(xù)出現(xiàn)時(shí),它們?nèi)绾闻c操作數(shù)結(jié)合的順序。對(duì)于大多數(shù)二元操作符(即需要兩個(gè)操作數(shù)的操作符),C語(yǔ)言遵循兩種基
    的頭像 發(fā)表于 08-20 11:42 ?903次閱讀

    typedef struct和直接struct的區(qū)別

    C語(yǔ)言中, typedef 和 struct 是兩種不同的關(guān)鍵字,它們?cè)诙x和使用上有著明顯的區(qū)別。 typedef struct 和直接 struct 在 C
    的頭像 發(fā)表于 08-20 10:58 ?2800次閱讀

    鴻蒙原生應(yīng)用元服務(wù)開(kāi)發(fā)-倉(cāng)頡基本概念標(biāo)識(shí)符

    在倉(cāng)頡編程語(yǔ)言中,開(kāi)發(fā)者可以給一些程序元素命名,這些名字也被稱(chēng)為“標(biāo)識(shí)符”,標(biāo)識(shí)符分為普通標(biāo)識(shí)符和原始標(biāo)識(shí)符兩類(lèi),它們分別遵從不同的命名規(guī)則。 普通標(biāo)識(shí)符不能和倉(cāng)頡關(guān)鍵字相同,可以取自以下兩類(lèi)字符
    發(fā)表于 08-06 17:37

    快速掌握C語(yǔ)言關(guān)鍵字

    C語(yǔ)言中的32個(gè)關(guān)鍵字你知道多少個(gè)?根據(jù)關(guān)鍵字的作用分為四類(lèi):數(shù)據(jù)類(lèi)型關(guān)鍵字、控制語(yǔ)句
    的頭像 發(fā)表于 07-06 08:04 ?357次閱讀
    快速掌握<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>關(guān)鍵字</b>

    嵌入式中C語(yǔ)言結(jié)構(gòu)體基本實(shí)現(xiàn)

    C語(yǔ)言中的數(shù)組只能允許程序員定義存儲(chǔ)相同類(lèi)型數(shù)據(jù)。但是結(jié)構(gòu)是C語(yǔ)言編程中允許您存儲(chǔ)不同數(shù)據(jù)類(lèi)型的數(shù)據(jù)。 結(jié)構(gòu)體的定義 ????要想定義結(jié)構(gòu),必須用到 struct
    的頭像 發(fā)表于 05-11 08:49 ?1051次閱讀
    嵌入式中<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>結(jié)構(gòu)體基本實(shí)現(xiàn)

    C語(yǔ)言中的typedef的應(yīng)用

    C 語(yǔ)言提供了 typedef 關(guān)鍵字,您可以使用它來(lái)為類(lèi)型取一個(gè)新的名字。下面的實(shí)例為單字節(jié)數(shù)字定義了一個(gè)術(shù)語(yǔ) BYTE。
    發(fā)表于 03-06 11:34 ?389次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言中</b>的typedef的應(yīng)用

    嵌入式C語(yǔ)言面試大挑戰(zhàn)

    C++中static關(guān)鍵字除了具有C中的作用還有在類(lèi)中的使用在類(lèi)中,static可以用來(lái)修飾靜態(tài)數(shù)據(jù)成員和靜態(tài)成員方法靜態(tài)數(shù)據(jù)成員
    發(fā)表于 03-05 14:18 ?356次閱讀
    嵌入式<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>面試大挑戰(zhàn)

    介紹C語(yǔ)言中錯(cuò)誤處理和異常處理的一些常用的方法和策略

    C語(yǔ)言是一種低級(jí)的、靜態(tài)的、結(jié)構(gòu)化的編程語(yǔ)言,它沒(méi)有提供像C++或Java等高級(jí)語(yǔ)言中的異常處理機(jī)制,例如try-catch-finally
    的頭像 發(fā)表于 02-28 14:25 ?631次閱讀

    關(guān)鍵字搜索文件夾中某個(gè)TXT文件

    文件夾中隨時(shí)創(chuàng)造TXT文件,如何及時(shí)選出剛創(chuàng)造的文件?或關(guān)鍵字搜索出需要的TXT文件?
    發(fā)表于 02-06 15:22

    在NVM和本地\"內(nèi)存中定義數(shù)組(靜態(tài) /global /local)的\"關(guān)鍵字是什么?

    在 NVM 和本地\"內(nèi)存中定義數(shù)組(靜態(tài) /global /local)的\"關(guān)鍵字是什么? 還有與 32 位對(duì)齊的關(guān)鍵字怎么樣。
    發(fā)表于 01-25 07:52

    如何解決C語(yǔ)言中的“訪(fǎng)問(wèn)權(quán)限沖突”異常?C語(yǔ)言引發(fā)異常原因分析

    如何解決C語(yǔ)言中的“訪(fǎng)問(wèn)權(quán)限沖突”異常?C語(yǔ)言引發(fā)異常原因分析? 在C語(yǔ)言中,訪(fǎng)問(wèn)權(quán)限沖突異常通
    的頭像 發(fā)表于 01-12 16:03 ?5772次閱讀