作者meconin (miss you ~)
看板C_and_CPP
標題Re: [問題] 關於指標與命令列參數的問題
時間Sun Feb 5 00:18:14 2012
: #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