最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

c:

修飾全局變量:

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

修飾局部變量:

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

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[偽常量]這種寫法是錯(cuò)誤的。

c++:

修飾全局變量:

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

修飾局部變量:

const修改局部變量,直接修改是不成功的,不會(huì)報(bào)錯(cuò),但是輸出的結(jié)果是修改前的值,相當(dāng)于沒有修改。因?yàn)樵赾++中,const修飾的無論是局部變量還是全局變量都是常量了。數(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)制類型轉(zhuǎn)換(c++的要求,因?yàn)檫@個(gè)時(shí)候&a的類型是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,所以說后來的*p = 200改的就是temp而不是a的值。臨時(shí)空間沒有什么意義。

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

總結(jié):

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

在c語言中:

對(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++語言中:

對(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ì)其取地址的話,在棧上分配內(nèi)存空間temp,修改不成功,因?yàn)樾薷牡闹皇莟emp的值,對(duì)在符號(hào)表中的a沒有影響。

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

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

總結(jié)

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

相關(guān)文章

  • C語言進(jìn)階棧幀示例詳解教程

    C語言進(jìn)階棧幀示例詳解教程

    這篇文章主要為大家介紹了C語言進(jìn)階棧幀的示例詳解教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-02-02
  • 舉例講解C語言程序中對(duì)二叉樹數(shù)據(jù)結(jié)構(gòu)的各種遍歷方式

    舉例講解C語言程序中對(duì)二叉樹數(shù)據(jù)結(jié)構(gòu)的各種遍歷方式

    這篇文章主要介紹了舉例講解C語言程序中對(duì)二叉樹數(shù)據(jù)結(jié)構(gòu)的各種遍歷方式,先序中序后序二叉樹遍歷幾乎成了最老生常談的數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)知識(shí),的朋友可以參考下
    2016-04-04
  • 在Linux下編譯C或C++程序的教程

    在Linux下編譯C或C++程序的教程

    這篇文章主要介紹了在Linux下編譯C或C++程序的教程,是C/C++入門學(xué)習(xí)中的必備知識(shí),需要的朋友可以參考下
    2015-07-07
  • C++智能指針之shared_ptr的具體使用

    C++智能指針之shared_ptr的具體使用

    本文主要介紹了C++智能指針之shared_ptr的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2022-05-05
  • C語言深度解剖篇之關(guān)鍵字以及補(bǔ)充內(nèi)容

    C語言深度解剖篇之關(guān)鍵字以及補(bǔ)充內(nèi)容

    C語言的關(guān)鍵字共有32個(gè),根據(jù)關(guān)鍵字的作用,可分其為數(shù)據(jù)類型關(guān)鍵字、控制語句關(guān)鍵字、存儲(chǔ)類型關(guān)鍵字和其它關(guān)鍵字四類,這篇文章主要給大家介紹了關(guān)于C語言深度解剖篇之關(guān)鍵字以及補(bǔ)充內(nèi)容的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • C++實(shí)現(xiàn)特殊矩陣的壓縮存儲(chǔ)算法

    C++實(shí)現(xiàn)特殊矩陣的壓縮存儲(chǔ)算法

    在實(shí)際存儲(chǔ)時(shí),會(huì)發(fā)現(xiàn)矩陣中有許多值相同的數(shù)據(jù)或有許多零數(shù)據(jù),且分布呈現(xiàn)出一定的規(guī)律,稱這類型的矩陣為特殊矩陣。本文將利用C++實(shí)現(xiàn)特殊矩陣的壓縮存儲(chǔ),感興趣的可以了解一下
    2022-08-08
  • 基于Matlab實(shí)現(xiàn)俄羅斯方塊游戲

    基于Matlab實(shí)現(xiàn)俄羅斯方塊游戲

    俄羅斯方塊是一個(gè)最初由阿列克謝帕吉特諾夫在蘇聯(lián)設(shè)計(jì)和編程的益智類視頻游戲。本文將利用Matlab實(shí)現(xiàn)這一經(jīng)典的小游戲,需要的可以參考一下
    2022-03-03
  • 使用C++實(shí)現(xiàn)單鏈表的操作與實(shí)踐

    使用C++實(shí)現(xiàn)單鏈表的操作與實(shí)踐

    在程序設(shè)計(jì)中,鏈表是一種常見的數(shù)據(jù)結(jié)構(gòu),特別是在動(dòng)態(tài)數(shù)據(jù)管理、頻繁插入和刪除元素的場(chǎng)景中,鏈表相比于數(shù)組,具有更高的靈活性和高效性,尤其是在需要頻繁修改數(shù)據(jù)結(jié)構(gòu)的應(yīng)用中,本文將詳細(xì)介紹如何用C++語言實(shí)現(xiàn)一個(gè)面向?qū)ο蟮膯捂湵?并展示完整的代碼示例
    2025-02-02
  • 基于QT制作一個(gè)簡(jiǎn)易的傳輸文件小工具

    基于QT制作一個(gè)簡(jiǎn)易的傳輸文件小工具

    本文主要介紹了通過QT實(shí)現(xiàn)的一個(gè)文件傳輸小工具。功能就是能實(shí)現(xiàn)文件的雙向傳輸,即客戶端能傳給服務(wù)端,服務(wù)端可以傳給客戶端。文中示例代碼具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下
    2021-12-12
  • C++多態(tài)的實(shí)現(xiàn)機(jī)制深入理解

    C++多態(tài)的實(shí)現(xiàn)機(jī)制深入理解

    這篇文章主要介紹了C++多態(tài)的實(shí)現(xiàn)機(jī)制理解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-07-07

最新評(píng)論

修武县| 南平市| 东辽县| 镇宁| 井研县| 安徽省| 阳原县| 囊谦县| 永定县| 海晏县| 昌邑市| 高阳县| 麻城市| 麟游县| 宝应县| 大渡口区| 沿河| 博兴县| 色达县| 精河县| 侯马市| 射阳县| 巩义市| 蒙阴县| 谢通门县| 阿拉善左旗| 通海县| 明星| 香港 | 黔东| 福建省| 大渡口区| 南投县| 木兰县| 沛县| 克什克腾旗| 清新县| 绿春县| 凌云县| 许昌县| 克东县|