0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

同樣是const,為什么結果不一樣?

學益得智能硬件 ? 來源:學益得智能硬件 ? 2023-02-02 16:03 ? 次閱讀

昨天有個學生去做C/C++軟件工程師的筆試題,遇到了這么一個題目,來問我結果是多少?

bc0d0b5c-a2ce-11ed-bfe3-dac502259ad0.png

看似非常普通的一道C語言題目,如果不指定編譯器,還真不知道結果是多少。

不信我來演示給你看下。

首先是用gcc來編譯,就是C語言的編譯器,語法沒有問題,運行結果,num = 2。

root@Turbo:test# gcc test.c -o test

root@Turbo:test# 。/test

num = 2

root@Turbo:test#

同樣的代碼,換成g++來編譯,就是C++的編譯器,結果是num = 1。

root@Turbo:test# g++ test.c -o test

root@Turbo:test# 。/test

num = 1

root@Turbo:test#

都說C++是兼容C語言的,為什么在處理結果上卻不同。

其實說兼容當然是沒問題的,只是C語言和C++中const的作用不同。

C語言中,const修飾的是只讀變量,意思是不能通過變量本身去修改對應內存的值,但是可以通過其他方式去修改,比如指針。代碼中確實也是通過指針來修改的,所以num對應的那塊內存值變了。

但是在C++中,const修飾的就是一個常量,跟define定義的宏有點類似,它存放在符號表中,接下來只要遇到這個常量,直接就是替換。

那么問題就來了,既然它沒有存放在內存中,為什么代碼中還能對他進行取地址的操作。

這一點主要還是為了兼容C語言,強行對它取地址,編譯器會分配一塊內存,并且把常量的值填在內存里面,然后取這塊內存的地址進行運算。但是整個過程并不會影響常量的屬性,代碼下面遇到,還是直接替換。

const在C++中還有很多用處,修飾成員變量、修飾成員函數(shù),所以學完了C語言,如果有精力,可以去看看C++,不為別的,學習C++可以更好的理解C語言。

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7581

    瀏覽量

    135590
  • C++
    C++
    +關注

    關注

    21

    文章

    2090

    瀏覽量

    73406
  • CONST
    +關注

    關注

    0

    文章

    43

    瀏覽量

    8136

原文標題:同樣是const,為什么結果不一樣?

文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    為什么labview公式節(jié)點內不同的公式形式結果不一樣呢?

    上面兩個程序其實是一樣的,第個和第二個中公式節(jié)點內只是x的三次方和二次方形式不一樣,但為什么結果圖形中虛線的圖線不一樣呢?應該
    發(fā)表于 01-07 16:30

    ad620放大電路結果跟想要的結果不一樣

    這個放大電路結果跟想要的結果不一樣。怎么辦, 想要的結果是4.5V
    發(fā)表于 05-13 20:37

    為什么同個電路,同樣的參數(shù),每次的仿真結果為什么會不一樣,頭疼

    用Multisim仿真個很簡單的電路圖,但是同個電路圖,同個仿真參數(shù),為什么仿真出來的結果不一樣呢?跪求大神指點解答!
    發(fā)表于 05-15 17:17

    請問使用ActiveX需要注意什么嗎?為什么兩個同樣程序框圖的vi,運行結果不一樣?

    不一樣?附件中的 Display PDF File-1.vi 是正??梢詧?zhí)行; Display PDF File-2.vi 卻有錯誤,執(zhí)行不出結果。
    發(fā)表于 03-28 10:43

    程序編輯器結果不一樣

    有個程序段int i=1;int j=0;j=((i++)*(i++));printf(“%d,%d\n”,i,j);在不同的編輯器結果為什么不一樣 我用虛擬機的VI編輯結果i=3;j=1;用C++編輯
    發(fā)表于 03-13 02:22

    為什么我的淚滴不一樣

    我的淚滴怎么和網上的不一樣??
    發(fā)表于 03-13 15:23

    請問keil5代碼一樣但運行結果不一樣是怎么回事?

    在用keil5的時候,兩個一模一樣的代碼執(zhí)行的結果不一樣。經過多次測試都是這樣的現(xiàn)象。不知道是不是我的環(huán)境配置有問題還是其他的?
    發(fā)表于 06-13 04:35

    這個仿真例程設置的參數(shù)一樣,為何會出現(xiàn)不一樣的仿真結果

    這個仿真例程設置的參數(shù)一樣,為何會出現(xiàn)不一樣的仿真結果?
    發(fā)表于 12-23 09:08

    freeRtos和裸機 跑同樣個程序,效率不一樣

    freeRtos和裸機 跑同樣個程序,效率不一樣,RTOS只有個task,而且沒有vTaskDelay 掛起。跑同樣
    發(fā)表于 07-04 11:10

    同樣的電機,電壓等級、功率等都一樣,為什么電機的勵磁電壓不一樣呢?

    請教了好多人,都沒有個真正的答案。 同樣的電機,電壓等級、功率等都一樣,為什么電機的勵磁電壓不一樣呢??
    發(fā)表于 11-17 08:28

    AD633在multisim上仿真,結果與預期不一樣怎么解決?

    按照官方提供的除法電路,在multisim上仿真,結果與預期不一樣,求高手解釋
    發(fā)表于 11-17 10:53

    在車輛自燃方面,電動汽車和燃油汽車有什么不一樣

    說起車輛的自燃問題,無論是純電動汽車還是燃油車,都會有自燃的事件出現(xiàn),對于同樣是自燃,電動汽車和燃油車汽車有哪些不一樣?
    發(fā)表于 10-28 09:00 ?1128次閱讀

    C++中不一樣的重載是什么

    這里想分享C++中不一樣的重載,即const重載。
    的頭像 發(fā)表于 02-21 14:02 ?708次閱讀
    C++中<b class='flag-5'>不一樣</b>的重載是什么

    電容容量一樣大小不一樣能用嗎

    有時候家里面電器中的電容損壞,很多人很難找到一模一樣的來更換,能找到容量致的電容器就不容易了,電容容量一樣大小不一樣能用嗎?
    的頭像 發(fā)表于 09-21 09:54 ?2212次閱讀

    不同芯片的DMA(Direct Memory Access)是不一樣

    不同芯片的DMA(Direct Memory Access)是不一樣
    的頭像 發(fā)表于 10-16 09:14 ?1371次閱讀