昨天有個學生去做C/C++軟件工程師的筆試題,遇到了這么一個題目,來問我結果是多少?
看似非常普通的一道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++中還有很多用處,修飾成員變量、修飾成員函數,所以學完了C語言,如果有精力,可以去看看C++,不為別的,學習C++可以更好的理解C語言。
審核編輯 :李倩
-
C語言
+關注
關注
180文章
7605瀏覽量
136993 -
C++
+關注
關注
22文章
2110瀏覽量
73685 -
CONST
+關注
關注
0文章
44瀏覽量
8177
原文標題:同樣是const,為什么結果不一樣?
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論