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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++:const分配内存情况分析

發(fā)布時(shí)間:2025/3/21 c/c++ 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++:const分配内存情况分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

//1、局部變量const int a = 10 ;??int * p = &a //分配臨時(shí)內(nèi)存??指針不可修改

????const int a = 10 ; 這句話表示const int a是存放在符號表中的常量,a是鍵,10是值。

平時(shí)是不分配空間的。int * p = &a,這句話的時(shí)候,系統(tǒng)會臨時(shí)在棧區(qū)分配一個臨時(shí)空間temp,temp空間的值是10.之后將臨時(shí)空間的地址賦值給指針p。之后通過*p修改的是臨時(shí)地址里面的值,函數(shù)結(jié)束后該臨時(shí)空間會釋放。這種情況利用指針是不能修改a的值的。

?

//2、當(dāng)加入extern 修飾const,也會分配內(nèi)存??全局區(qū) 指針不能修改

extern會將const修飾的變量提升為全局變量,但是不能修改因?yàn)樵撟兞渴窃谌謪^(qū)的ro.data區(qū)?全局變量沒有用extern const修飾,而是單純的const修飾,那么全局變量位置還是處于ro.data,只是作用域變小,當(dāng)前文件內(nèi)。

?

//3、用變量初始化const,也會另外單獨(dú)分配內(nèi)存,如下????可以用指針修改值

????int b =??10;

????const int a = b;????//a和b的地址不一樣各自獨(dú)立分配空間 ?a地址在棧區(qū)

?

//4、const修飾一個普通變量的別名,別名的空間就是變量的空間。可以用指針修改

????//此時(shí)f是c的別名??二者地址空間一樣

????intc = 5;

????const int &f = c;???//f接收變量的賦值,f是c的別名,f的地址就是c的地址

?

????cout<< &c << endl;???//地址和下面地址一樣

????cout<< &f << endl;?

?

????cout<< f << endl;??//結(jié)果5

????int*p= (int*)&f;

????*p= 55;

????cout<< f << endl;??//結(jié)果55

????cout<< c << endl;??//結(jié)果55

?

?

//5、const修飾一個字面值的別名時(shí),分配臨時(shí)空間,此時(shí)別名就是臨時(shí)空間的別名,可以用指針修改值

????const int &ref =10; //相當(dāng)于int temp = 10;???const int& ref = temp;

????int * p = (int*)&ref;

????*p = 10000;

????cout << ref << endl;//結(jié)果是10000,可以修改

?

????//const int &a = 10;相當(dāng)于系統(tǒng)首先開辟一個臨時(shí)空間int temp = 10;

????//之后constint& ref = temp;相當(dāng)于ref是這個臨時(shí)空間的別名(臨時(shí)空間在棧區(qū))。

????//而const這個時(shí)候修飾的實(shí)際temp地址的別名,temp的地址在棧區(qū)。

????//通過指針是可以修改該塊地址空間的值的,該塊空間的值變了,也就是ref別名的值變了

?

????//那么此時(shí)const int &ref = 10;中的ref存放位置就不是符號表中,所以用指針可以修改

????//其值

?

????//只要const修飾分配內(nèi)存,可以通過間接方式進(jìn)行修改(根據(jù)情況,如果在棧區(qū)或者

????//堆區(qū)可以修改,如果在常量區(qū)不可以修改)

?

//6、函數(shù)返回值中,如果時(shí)用const別名接收一個變量,那么相當(dāng)于上面第四種情況,

?

//此時(shí)f是a的別名??二者地址空間一樣

void showValue(constint & f) // const int &f??=a????f是a的別名,可以通過指針修改,

{??????????????????????????//但是加上const表示不要修改!(提醒功能)

????//f = 1000;

????int *p = (int*)&f;

????*p = 100;

????cout << f << endl;

????cout << &f<< endl;???//地址同下面相同

}

void test02()

{

????int a = 10;

????showValue(a);

????cout << &a << endl;???//地址和上面相同

}

?

?

//7、對于自定義數(shù)據(jù)類型 ,也會分配內(nèi)存??可以用指針修改值

structPerson

{stringname;

intage;};

const Person p;??//p分配了空間,可以用指針修改
?

總結(jié)

以上是生活随笔為你收集整理的C++:const分配内存情况分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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