亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

c語(yǔ)言和c++語(yǔ)言中const修飾的變量區(qū)別淺析

 更新時(shí)間:2022年02月18日 10:40:14   作者:是小明同學(xué)啊  
這篇文章主要給大家介紹了關(guān)于c語(yǔ)言和c++語(yǔ)言中const修飾的變量區(qū)別的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

c:

修飾全局變量:

用const修飾的全局變量是沒(méi)有辦法直接修改的,間接的修改也是不成功的(語(yǔ)法可以通過(guò),但是編譯運(yùn)行的時(shí)候會(huì)報(bào)錯(cuò)。)(const只要是修飾全局變量,那么就會(huì)儲(chǔ)存到常量區(qū)中,收到常量區(qū)的保護(hù)。)

修飾局部變量:

但是如果用const修飾局部變量,同樣的也是沒(méi)有辦法直接修改的,但是是可以間接修改的。

int main()
{
    const int b = 10;
    int* p = &b;
    *p = 20;
    pirntf("%d",b);
    return 0;
}

這樣就不會(huì)報(bào)錯(cuò)。(const修飾的局部變量是儲(chǔ)存到棧上,相當(dāng)于分配到內(nèi)存上,可以修改成功)。

通常叫這種變量為偽常量,不能用這種常量不能構(gòu)成數(shù)組。arr[偽常量]這種寫(xiě)法是錯(cuò)誤的。

c++:

修飾全局變量:

const修飾全局變量的效果是和c語(yǔ)言的一樣的。無(wú)論是直接修改還是間接修改都是報(bào)錯(cuò)的。

修飾局部變量:

const修改局部變量,直接修改是不成功的,不會(huì)報(bào)錯(cuò),但是輸出的結(jié)果是修改前的值,相當(dāng)于沒(méi)有修改。因?yàn)樵赾++中,const修飾的無(wú)論是局部變量還是全局變量都是常量了。數(shù)組的初始化可以使用這個(gè)const修飾的變量了。

int main
{
    const int a = 100;
    int* p  = (int *)&a;
    *p  = 200;
    cout<<a<<endl;//100
    return 0
}

輸出的結(jié)果依然是100,注意給p指針賦值的時(shí)候需要將&a進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換(c++的要求,因?yàn)檫@個(gè)時(shí)候&a的類(lèi)型是const int*)

剖析這個(gè)代碼:

int *p = (int *)&a

實(shí)際上是int temp = a 先在棧上創(chuàng)建了一個(gè)和a的值一樣的變量temp,

當(dāng)對(duì)const修飾的局部變量取地址的時(shí)候,編譯器會(huì)給變量分配臨時(shí)的內(nèi)存空間,這個(gè)內(nèi)存空間就是temp的內(nèi)存空間。而給p賦值的時(shí)候就是將這個(gè)臨時(shí)變量的空間的地址賦值給了p。

也就是int*p = &temp然后p指針指向的也就是temp,所以說(shuō)后來(lái)的*p = 200改的就是temp而不是a的值。臨時(shí)空間沒(méi)有什么意義。

(const int a =100寫(xiě)出來(lái)了以后就一直放在符號(hào)表中(鍵值對(duì)一一對(duì)應(yīng)著不會(huì)改變。))

總結(jié):

在c++語(yǔ)言中,一個(gè)const修飾的變量不是必須創(chuàng)建內(nèi)存空間的,c語(yǔ)言中,總是需要一塊內(nèi)存空間。

在c語(yǔ)言中:

對(duì)于全局變量:

將const修飾的全局變量存儲(chǔ)在只讀數(shù)據(jù)段,保存在符號(hào)表中,第一次使用的時(shí)候再分配內(nèi)存,程序結(jié)束的時(shí)候釋放。(這個(gè)是不能修改的,因?yàn)榇鎯?chǔ)在只讀數(shù)據(jù)段中)

對(duì)于局部變量:

將const修飾的局部變量存儲(chǔ)在棧中,代碼塊結(jié)束的時(shí)候釋放。(這個(gè)是可以修改的,在棧上)

在c++語(yǔ)言中:

對(duì)于全局變量:

是否為const變量分配內(nèi)存空間取決于const變量的用途。如果是作為一個(gè)值(用這個(gè)值去替換一個(gè)函數(shù)名),就不分配空間。如果是對(duì)這個(gè)全局變量取地址,那么會(huì)分配內(nèi)存,存儲(chǔ)在只讀數(shù)據(jù)段。兩種都是不能進(jìn)行修改的。

對(duì)于局部變量:

如果是const int a = 100;直接放進(jìn)符號(hào)表中,不分配內(nèi)存。如果對(duì)其取地址的話(huà),在棧上分配內(nèi)存空間temp,修改不成功,因?yàn)樾薷牡闹皇莟emp的值,對(duì)在符號(hào)表中的a沒(méi)有影響。

如果是const int a = b;分配內(nèi)存。

如果是自定義的類(lèi)型,比如類(lèi)對(duì)象,分配內(nèi)存。

總結(jié)

到此這篇關(guān)于c語(yǔ)言和c++語(yǔ)言中const修飾變量區(qū)別的文章就介紹到這了,更多相關(guān)c語(yǔ)言和c++中const修飾的變量?jī)?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言排序算法之冒泡排序?qū)崿F(xiàn)方法【改進(jìn)版】

    C語(yǔ)言排序算法之冒泡排序?qū)崿F(xiàn)方法【改進(jìn)版】

    這篇文章主要介紹了C語(yǔ)言排序算法之冒泡排序?qū)崿F(xiàn)方法,結(jié)合具體實(shí)例形式分析了C語(yǔ)言實(shí)現(xiàn)的基本冒泡排序?qū)崿F(xiàn)方法及增設(shè)flag標(biāo)志位的改進(jìn)型算法,需要的朋友可以參考下
    2017-09-09
  • 一文讓你徹底明白C++中的const

    一文讓你徹底明白C++中的const

    這篇文章主要給大家介紹了關(guān)于C++中const的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 使用C語(yǔ)言打造通訊錄管理系統(tǒng)和教學(xué)安排系統(tǒng)的代碼示例

    使用C語(yǔ)言打造通訊錄管理系統(tǒng)和教學(xué)安排系統(tǒng)的代碼示例

    這篇文章主要介紹了使用C語(yǔ)言打造通訊錄管理系統(tǒng)和教學(xué)安排系統(tǒng)的代碼示例,利用C語(yǔ)言強(qiáng)大的數(shù)組和指針能夠更加清晰地體現(xiàn)設(shè)計(jì)思路:D 需要的朋友可以參考下
    2016-06-06
  • C語(yǔ)言?auto和register關(guān)鍵字

    C語(yǔ)言?auto和register關(guān)鍵字

    這篇文章主要介紹了C語(yǔ)言?auto、register關(guān)鍵字,文章通過(guò)變量展開(kāi)全文相關(guān)的詳細(xì)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04
  • C++泛型模板約束深入講解

    C++泛型模板約束深入講解

    C/C++ 作為 C# 語(yǔ)言的前置版本,ECMA工業(yè)化編程語(yǔ)言,自然是存在 “泛型模板約束” 的功能的,只是本文不以 C/C++ 20 新語(yǔ)法搞出來(lái)的 “requires” 關(guān)鍵字來(lái)實(shí)現(xiàn),它很難用
    2022-09-09
  • C++ 約瑟夫環(huán)的實(shí)例代碼

    C++ 約瑟夫環(huán)的實(shí)例代碼

    這篇文章主要介紹了C++ 約瑟夫環(huán)的實(shí)例代碼的相關(guān)資料,希望通過(guò)本文能幫助到大家,實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10
  • C語(yǔ)言驅(qū)動(dòng)開(kāi)發(fā)之內(nèi)核文件的讀寫(xiě)

    C語(yǔ)言驅(qū)動(dòng)開(kāi)發(fā)之內(nèi)核文件的讀寫(xiě)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言驅(qū)動(dòng)開(kāi)發(fā)中內(nèi)核文件的讀寫(xiě)的系列函數(shù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-06-06
  • 詳解Matlab中自帶的Java操作合集

    詳解Matlab中自帶的Java操作合集

    其實(shí)Matlab中也有一些自帶的Java操作,例如:獲取鼠標(biāo)在全屏位置、獲取當(dāng)前剪切板內(nèi)容、獲取鼠標(biāo)處像素顏色等,本文總結(jié)了七個(gè)這樣的操作,感興趣的可以了解一下
    2022-03-03
  • C++中的const限定符的使用和作用

    C++中的const限定符的使用和作用

    C++ 中的 const 限定符用于聲明不可變量,即在變量聲明時(shí)指定該變量的值不可修改。它的使用可以幫助程序員避免一些常見(jiàn)的編程錯(cuò)誤,如誤修改不應(yīng)該被修改的變量的值等
    2023-05-05
  • VS2019開(kāi)發(fā)簡(jiǎn)單的C/C++動(dòng)態(tài)鏈接庫(kù)并進(jìn)行調(diào)用的實(shí)現(xiàn)

    VS2019開(kāi)發(fā)簡(jiǎn)單的C/C++動(dòng)態(tài)鏈接庫(kù)并進(jìn)行調(diào)用的實(shí)現(xiàn)

    這篇文章主要介紹了VS2019開(kāi)發(fā)簡(jiǎn)單的C/C++動(dòng)態(tài)鏈接庫(kù)并進(jìn)行調(diào)用的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03

最新評(píng)論