此代碼片段在ANSI C中有很好的定義嗎? 在我的系統(Linux x86_64)上它似乎運行得很好並且打印出一個地址,但它會一直如此嗎?例如。該參數可能通過寄存器傳遞,並且認爲這個地址看起來不正確。採用函數參數的地址是否合法?
#include <stdio.h>
void foo(int a)
{
printf("%p\n", &a);
}
int main(void)
{
foo(42);
return 0;
}
編輯:看起來像海灣合作委員會將把寄存器傳遞到堆棧之前的價值取得它的地址。
<foo>:
55 push rbp
48 89 e5 mov rbp,rsp
48 83 ec 10 sub rsp,0x10
89 7d fc mov DWORD PTR [rbp-0x4],edi
b8 1c 06 40 00 mov eax,0x40061c
48 8d 55 fc lea rdx,[rbp-0x4]
48 89 d6 mov rsi,rdx
48 89 c7 mov rdi,rax
b8 00 00 00 00 mov eax,0x0
e8 d8 fe ff ff call 4003c0 <[email protected]>
c9 leave
c3 ret
+1,你的回答比較完整:) – Stephen 2010-07-11 14:43:08