看板 C_and_CPP 關於我們 聯絡資訊
: #include <stdio.h> : : void main(int argc,char *argv[]) : { : char *x[3]; : char (*a)[3]; : : printf ("sizeof(x):%d\n", sizeof(x)); : printf ("sizeof(a):%d\n", sizeof(a)); : printf ("sizeof(argv):%d\n", sizeof(argv); : } : : : : → ForOthers:不太懂樓上兩位的意思..可以講詳細點嗎??:) 02/04 18:12 我其實不是很肯定一些名詞確切的定義,sizeof 應該是函數、運算子還是巨集? 誠如推文,sizeof 應被定義為 operator 不過事實是這樣的, compiler 幫你把 C語言 變成 組合語言 一般他看到變數就會放到 stack 裡面 int a; int b char *c[3]; O O O O O O O O O O O O O O O O O O O O O O O O ======= ------- ^ rsp b a 類似這樣,但當他看到 a = sizeof(c); 他實際上是寫 push rbp mov rbp, rsp assign rsp 的值給 rbp mov DWORD PTR [rbp-4], 24 就是直接知道 c 的大小是 24 的意思 而他看到 b = sizeof(argv); mov DWORD PTR [rbp-8], 8 其實也是直接就知道 argv 的大小是 8 btw, 這是 64-bit 作業系統 XD 我是直接用 gcc -S -masm=intel -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.46
firejox:sizeof 是keyword 02/05 00:19
james732:sizeof在編譯的時候就會計算好,並且變成一個常數 02/05 01:07
tropical72:sizeof 是運算子 02/05 01:22
wasidada:c++ primer 4e p167 5.8 sizeof 運算子 02/05 16:25
※ 編輯: meconin 來自: 140.112.30.46 (02/05 18:11)
firejox:從ANSI C開始他就是keyword的了 但他也是運算子 02/05 18:13
ForOthers:未看先推..感謝您費心的講解..:) 02/06 11:25
ForOthers:我懂了..謝謝meconin大的指教..:) 02/06 14:24
FOXSMALL:sizeof是keyword 02/07 16:28