看板 C_and_CPP 關於我們 聯絡資訊
大大們好,今天我在練習sizeof函數時遇到奇怪的現象,以下截圖來表示 我的操作過程。 我的程式碼: #include <stdio.h> int main(){ printf("%d\n", sizeof('a')); printf("%d\n", sizeof(char)); getchar(); } ------------------------------以下是步驟-------------------------- 1、一開始用cpp檔來存這段程式碼,結果是印出兩個1 http://imgur.com/Wl0FvWh 2、然後我在右邊方案總管的地方,把cpp改成c,結果印出4和1 http://imgur.com/7TixZdb 3、接著我把第二個printf註釋掉,結果印出4,這時還是c檔 http://imgur.com/ZtHWIHS 4、然後一樣的代碼我把c再改成cpp,結果卻是4而不是1 http://imgur.com/GSi9yIS 5、最後我把註釋復原,此時印出兩個1,和一開始的結果一樣 http://imgur.com/OY4Tc21 有兩個問題想請問各位大大 1、用c檔和cpp檔印出sizeof('a')的結果為什麼不一樣呢?那'a'到底多大? 2、為啥同是cpp檔的情況下,印出來的結果一下是1一下是4,可以讓它這樣 變來變去的嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.36.63.50 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1451552611.A.85A.html
hth9494: 也預祝大家新年快樂哦~ 12/31 17:05
bibo9901: c的sizeof('a') == sizeof(int) 12/31 17:06
bibo9901: c++的sizeof('a') == sizeof(char) 12/31 17:07
bibo9901: 還有sizeof回傳型態是size_t, printf 裡面要用 %zd 12/31 17:08
TobyH4cker: char ch = 'a'; 12/31 20:08
TobyH4cker: printf("%d\n", sizeof(ch)); 12/31 20:08
TobyH4cker: 3.到4.沒變我猜是因為程式碼沒有修改就沒有重新編譯? 12/31 20:10
TobyH4cker: 的確跳過編譯了,你把Source.obj刪除後再build就正確 12/31 20:16