我很困惑!以下所有printf都是打印函數地址的正確方法? 讓我告訴你我的困惑。每次我運行所有這些的printf的(也就是第一個printf的,第二個printf和第三的printf)的,在輸出我得到 02D4 02D4 02D4 但如果我刪除或第一和第二的printf的評論,我得到如下因素作爲輸出 02BA 當我刪除第三printf語句,我得到下面的輸出 02D0 當我再次取消註釋所有這三個,我得到: 02D4 02D4 02D4 爲什麼一個語句影響其他的printf線的輸出? 這不是功能的地址嗎? 我聽說s和& s給出了與地址相同的值(就像數組一樣)。但在這裏我很困惑,爲什麼s和& s受到影響,當我嘗試打印b也是,其中b = s或& s。與功能地址混淆c
#include<stdio.h>
#include<conio.h>
int s(int);
void main()
{
int a=10,*b;
clrscr();
b=s(a++);
b=&s;
printf("%p\n",s); // 1st printf
printf("%p\n",&s); //2nd printf
printf("%p\n",b); //3rd printf
getch();
}
int s(int x)
{
return x;
}
你不應該把一個函數指針放入一個變量指針(它們不能保證是相同的大小),但除此之外它看起來沒問題。 C語言的一個特例是沒有'&'的函數名稱隱式獲得(我個人更喜歡總是使其明確) – Dave
(儘管如此,就像不應該將函數指針轉換爲變量指針,你不應該使用'%p'格式。看到這個答案是一個安全的方式來打印一個函數指針:http://stackoverflow.com/a/2741896/1180785) – Dave
至於爲什麼你的地址改變,這是因爲你正在重新編譯腳本!即使您完全沒有對代碼進行任何更改,它們在編譯之間也可能會有所不同。 – Dave