最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

C/C++編程筆記:C++中的 const 變量詳解,教你正確認識const用法

2020-08-28 22:01 作者:C語言編程__Plus  | 我要投稿



1、C中的const

1、局部const變量存放在堆棧區(qū)中,會分配內(nèi)存(也就是說可以通過地址間接修改變量的值)。測試代碼如下:


運行結(jié)果:


2、全局const變量存放在只讀數(shù)據(jù)段(不能通過地址修改,會發(fā)生寫入錯誤), 默認為外部聯(lián)編,可以給其他源文件使用(需要用extern關(guān)鍵字修飾)


運行結(jié)果:


由于分文件編寫,不好呈現(xiàn),所以在這里不為大家提供c語言全局const變量默認為外部聯(lián)編的案例。如果各讀者有興趣,可自行嘗試。具體步驟如下,可新建一個源文件,并且提供a變量的聲明,如:extern const int a。


2、C++中的const

1、普通局部const變量

對于基本類型,以符號表中的數(shù)據(jù)進行初始化的普通局部const變量,此時不會分配內(nèi)存,將其放入符號表中,如果對它取地址,則會開辟一個新的空間,也就是說會創(chuàng)建一個臨時變量,如果通過地址間接進行修改值不會影響到其本身。測試代碼如下:


運行結(jié)果:


在這里解釋一下上述代碼:第二行代碼,使用了const(expression),顯示轉(zhuǎn)換,這是由于c++比c類型轉(zhuǎn)換更嚴格。所以需要將 const int * 轉(zhuǎn)換為 int * 才能夠進行賦值,并且第二行代碼將被隱式轉(zhuǎn)換為如下代碼:

????????int temp=a;

????????int *ptr=&temp;

//所以對指針 ptr 指向的內(nèi)存空間進行操作,并不會影響到 a。

對于基本類型,用變量初始化的普通局部const變量,此時會在堆棧區(qū)開辟內(nèi)存,可以通過地址間接修改值。測試代碼如下:


運行結(jié)果:


(3)對于自定義類型,都會分配內(nèi)存,可以通過地址間接修改值


運行結(jié)果:


2、普通全局const變量

與局部const變量基本相同,只是內(nèi)存開辟在全局/堆區(qū),對于c++而言,全局const變量默認為內(nèi)部聯(lián)編,可以在定義時加extern關(guān)鍵字聲明為外部聯(lián)編。 由于分文件編寫不好展示,請讀者自行嘗試。

3、const 成員變量/成員函數(shù)

const成員變量只能被const成員函數(shù)訪問

const成員函數(shù),能夠訪問所有成員變量,但是在函數(shù)體內(nèi)不能直接修改變量的值(包括普通成員變量),如果需要在函數(shù)體內(nèi)修改普通成員變量的值,需要在變量定義的前面添加mutable關(guān)鍵字,或者通過地址間接修改。注意:const成員函數(shù)只能被該類的const對象訪問。測試代碼如下:


運行結(jié)果:


3、C/C++中const異同總結(jié)

c語言全局const會被存儲到只讀數(shù)據(jù)段。c++中全局const當聲明extern或者對變量取地址時,編譯器會分配存儲地址,變量存儲在只讀數(shù)據(jù)段。兩個都受到了只讀數(shù)據(jù)段的保護,不可修改。

c語言中局部const存儲在堆棧區(qū),只是不能通過變量直接修改const只讀變量的值,但是可以跳過編譯器的檢查,通過指針間接修改const值。

c++中對于局部的const變量要區(qū)別對待:

(1)對于基礎(chǔ)數(shù)據(jù)類型,也就是const int a =? 10這種,編譯器會把它放到符號表中,不分配內(nèi)存,當對其取地址時,會分配內(nèi)存。

a在符號表中,當我們對a取地址,這個時候為a分配了新的空間,*p操作的是分配的空間,而a是從符號表獲得的值。

(2)對于基礎(chǔ)數(shù)據(jù)類型,如果用一個變量初始化const變量,如果const int a = b,那么也是會給a分配內(nèi)存。

(3)對于自定數(shù)據(jù)類型,比如類對象,也會分配內(nèi)存。

c中const默認為外部連接,c++中const默認為內(nèi)部連接.當c語言兩個文件中都有const int a的時候,編譯器會報重定義的錯誤。而在c++中,則不會,因為c++中的const默認是內(nèi)部連接的。如果想讓c++中的const具有外部連接,必須顯示聲明為: extern const int a = 10;

希望對你有幫助!

自學C/C++編程難度很大,如果你想更快提升自己的編程能力和編寫項目的水平,歡迎一起共同成長!

學習C/C++編程知識,提升C/C++編程能力,歡迎關(guān)注UP一起來成長!
另外,UP在主頁上傳了一些學習C/C++編程的視頻教程,有興趣或者正在學習的小伙伴一定要去看一看哦!會對你有幫助的~

C/C++編程筆記:C++中的 const 變量詳解,教你正確認識const用法的評論 (共 條)

分享到微博請遵守國家法律
丽江市| 曲麻莱县| 桦甸市| 长汀县| 永修县| 海安县| 土默特右旗| 丁青县| 乐业县| 南宁市| 安阳市| 莱西市| 安达市| 泽库县| 西充县| 临邑县| 灌云县| 乐都县| 阆中市| 永登县| 宜丰县| 高阳县| 仁寿县| 基隆市| 北流市| 乌拉特前旗| 略阳县| 沾化县| 禄劝| 洞口县| 东城区| 兴仁县| 四子王旗| 屯昌县| 肃南| 栖霞市| 镇坪县| 同江市| 武城县| 封开县| 若羌县|