[英]Is it garbage value that is being printed?
#include <stdio.h>
#include <conio.h>
int f(int a){
int i,f=1;
for(i=1; i<a; i++)
f=f*i;
return f;
}
void main(){
int k;
clrscr();
int (*u)(int);
u=&f;
printf("%d", u);
getch();
}
上面的代碼在TurboC++上打印657並且輸出不隨時間變化,所以它不是垃圾值嗎?
#include <stdio.h>
int f(int a){
int i,f=1;
for(i=1; i<a; i++)
f=f*i;
return f;
}
int main(){
int k;
int (*u)(int);
u=&f;
printf("%d", u);
return 0;
}
這個修改后的代碼版本返回:
4199220 on CodeBlocks
4199728 on DevC++
134521824 on OnlineIDE
134513824 on gcc 4.9.2
這些值似乎不會隨着不同的運行而改變。 輸出當然取決於編譯器,但請解釋如何生成此輸出?
隨着聲明
printf("%d", u);
您將指針u
打印為十進制數,即您打印u
的值,即它指向的內容。
該地址可能不同,因為不同的編譯器和鏈接器可能會將其放置在不同的位置,沒有“標准”放置函數的位置。
此外,由於您使用格式"%d"
來打印指針,因此該行為在技術上是undefined 。 要打印指針,您應該使用"%p"
格式,並將指針強制轉換為void *
(例如,請參閱此printf
(和系列)參考以獲取更多信息)。
printf("%d", u);
在上面的行中u
是一個指向函數的指針。 當您將此地址解釋為int
並打印它時,行為未定義。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.