[英]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.