Re: [問題] 關於指標與命令列參數的問題

看板C_and_CPP (C/C++)作者 (miss you ~)時間14年前 (2012/02/05 00:18), 編輯推噓2(206)
留言8則, 6人參與, 最新討論串2/2 (看更多)
: #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

02/05 00:19, , 1F
sizeof 是keyword
02/05 00:19, 1F

02/05 01:07, , 2F
sizeof在編譯的時候就會計算好,並且變成一個常數
02/05 01:07, 2F

02/05 01:22, , 3F
sizeof 是運算子
02/05 01:22, 3F

02/05 16:25, , 4F
c++ primer 4e p167 5.8 sizeof 運算子
02/05 16:25, 4F
※ 編輯: meconin 來自: 140.112.30.46 (02/05 18:11)

02/05 18:13, , 5F
從ANSI C開始他就是keyword的了 但他也是運算子
02/05 18:13, 5F

02/06 11:25, , 6F
未看先推..感謝您費心的講解..:)
02/06 11:25, 6F

02/06 14:24, , 7F
我懂了..謝謝meconin大的指教..:)
02/06 14:24, 7F

02/07 16:28, , 8F
sizeof是keyword
02/07 16:28, 8F
文章代碼(AID): #1FBLfAB8 (C_and_CPP)
文章代碼(AID): #1FBLfAB8 (C_and_CPP)