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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于const变量的一点理解

發布時間:2024/4/18 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于const变量的一点理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

無意間看到一題目 是關于const變量的。代如下:

問題是:pCInt = &LENGTH。然而后面的輸出是1 2。為什么???

?

一步一步分析,const int *pCInt = & LENGTH;pCInt 為指向LENGTH地址的值,且為常量。

(int) *pCInt = 2; 實際上等同const_cast<int>(*pCInt) = 2;

去掉變量的常量屬性再賦值。也就是改變了 pCInt 指向的地址的值為2。

即然值為2,那么LENGTH中內存的值也為2,為什么會輸出1呢?是不是編譯器做了什么處理?(我當時給出的回答就是編譯器做出了處理,具體是什么不清楚)

后來仔細想了下,可能是符號替換,不知道對不。

?

下面用匯編代碼來驗證我們的想法。

(為了看得清楚,把cout改成printf了)

從printf("%d/n",LENGTH);

00401056 ?push ? ? ? ?1 ??

可以看出,編譯器是做的符號替換,就是在編譯的時候遇到LENGHT直接替換為1。

?

printf("%d/n",*pCInt);

00401065 ?mov ? ? ? ? eax,dword ptr [pCInt]?

00401068 ?mov ? ? ? ? ecx,dword ptr [eax]?

?

遇到*pCInt是直接從內存中去取值。

?

總結如下:

?1.變量本身的類型最好不要去改變,除非必要。

?2.要明確cosnt的意義,什么時候該用,什么時候不該用,這是基本功。

?3.理解符號替換,就相當于宏定義。

?

總結

以上是生活随笔為你收集整理的关于const变量的一点理解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。