多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 對 const 的思考

對 const 的思考

來源:程序員人生   發布時間:2015-01-15 08:41:53 閱讀次數:2628次

用const 修飾的數值,1般是不可修改的,但在C語言中,可以通過變量的地址來修改其內容。

#include <stdio.h> int main(int argc, char *argv[]) { const int i = 10; int *p = &i; // 取i 的地址 *p = 100; // 修改地址里面的內容 //i = 0; // 報錯! printf("*p = %d, i = %d ", *p, i); return 0; }

結果:


const 修飾的數值已被修改了。


但是如果在C++中這么做,那末編譯器會報錯,說明C++的編譯檢查更加嚴格,那末依照通過變量地址來修改其變量的想法,進行修改。

#include <iostream> using namespace std; int main(int argc, char *argv[]) { const int i = 10; int addr = (int)&i; int *p = (int*)addr; *p = 100; // 通過地址修改i 的值 cout<<"*p = "<<*p<<", i = "<<i<<endl; return 0; }

結果


i 的數值沒有產生變化?!

調試:



在調試結果中,i 的數值已是100了,打印的結果卻還是原來的數值,通過反匯編代碼可以看到,push 0AH。

也就是在打印的時候,并沒有從i 的地址中重新去取數值,而是直接將i原始的結果push進去,所以結果沒有變化。

是否是所有const修飾的數值,其使用和賦值都是通過原始的數值,而不是再從地址去數值?

簡單測試代碼:

#include <iostream> using namespace std; int main(int argc, char *argv[]) { const int i = 10; const int j = 100; int k = 0; k = i; k = j; cout<<i<<", "<<j<<endl; return 0; }

結果:



果然在C++中,從反匯編結果中知道,用const修飾的數值,在使用的時候,不會再從與本來的地址中取數值了,應當是用const修改的數值,被寄存在寄存器中了,直接從寄存器中取值,而不會再從地址取值。


一樣1段代碼,如果用C語言編譯,則會從本來的地址中取值。



總結:在反匯編代碼中,加上 const 與沒有加上 const 的反匯編代碼是1樣的,說明const 對實際代碼并沒有產生特別的影響,那末可知,const 只影響到編譯器,也就是編譯器會對const指向的數值進行檢查,所以嚴格來講,const 修飾的不是1個常量,而是編譯器的1種編譯檢查,應當說是變量的不可修改性。


對const修飾的變量,在使用時:

在C語言中,會從本來的變量地址中,獲得數值。(便可以通過變量的地址來修改const修飾的變量)

在C++語言中,不會從本來的變量地址中獲得數值。(即即便通過變量的地址成功修改變量了,其變量在使用時,由于不會從地址中獲得數值,所以還是本來的數值,說明C++的編譯機制,更加保證了const修飾的變量的不可修改性)


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 日本不卡在线播放 | 亚洲国产女人aaa毛片在线 | 久久这里是精品 | 国产区一区二 | 精品国产v无码大片在线观看 | 欧美黑人乱大交 | 一区二区3区免费视频 | 中文字幕成人在线 | 国产精品高清一区二区三区不卡 | 成人在线手机视频 | 国内精品免费视频精选在线观看 | 日本三级午夜理伦三级三 | 三级黄在线播放 | 日韩在线不卡一区在线观看 | 亚洲国产精品ⅴa在线观看 亚洲国产精品aaa一区 | 免费大黄网站在线观 | 精品一区二区三区在线视频观看 | 日本一区免费看 | 国产精品福利片免费看 | 男人都懂的www网站免费观看 | 国产午夜精品一区二区三区 | 国内精品久久国产大陆 | 国产裸舞福利在线视频合集 | 国产产一区二区三区久久毛片国语 | 香港aa三级久久三级不卡 | 中文字幕第二十页 | 中文精品久久久久国产网站 | 午夜欧美成人久久久久久 | 国产v片成人影院在线观看 国产v片在线观看 | 日韩在线不卡一区在线观看 | 亚洲成a人一区二区三区 | 久久久国产精品免费 | 亚洲性生活| 尤物视频免费 | 老女人一级全黄肉体毛片 | 在线亚洲观看 | www视频在线观看天堂 | 国产中文字幕在线免费观看 | www.中文字幕在线 | 2020中文字幕 | 亚洲天堂最新地址 |