精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

同樣是const,為什么結(jié)果不一樣?

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

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

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

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

不信我來演示給你看下。

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

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

root@Turbo:test# 。/test

num = 2

root@Turbo:test#

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

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

root@Turbo:test# 。/test

num = 1

root@Turbo:test#

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

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

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

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

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

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

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

審核編輯 :李倩

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

    關(guān)注

    180

    文章

    7598

    瀏覽量

    136197
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2104

    瀏覽量

    73494
  • CONST
    +關(guān)注

    關(guān)注

    0

    文章

    44

    瀏覽量

    8148

原文標(biāo)題:同樣是const,為什么結(jié)果不一樣?

文章出處:【微信號:學(xué)益得智能硬件,微信公眾號:學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

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

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

    ad620放大電路結(jié)果跟想要的結(jié)果不一樣

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

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

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

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

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

    程序編輯器結(jié)果不一樣

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

    為什么我的淚滴不一樣

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

    請問keil5代碼一樣但運(yùn)行結(jié)果不一樣是怎么回事?

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

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

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

    freeRtos和裸機(jī) 跑同樣個程序,效率不一樣

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

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

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

    AD633在multisim上仿真,結(jié)果與預(yù)期不一樣怎么解決?

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

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

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

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

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

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

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

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

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