0.99869
以上代码在TurboC ++上打印657,输出不随时间变化,那么它不是垃圾值吗?
#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();
}
这段代码的修改版本返回:
#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;
}
这些值似乎不随着不同的运行而改变。 输出当然是编译器依赖但是 请解释如何生成此输出?
答案 0 :(得分:3)
声明
printf("%d", u);
您将指针 u
打印为十进制数字,即打印u
的值,指向的内容。
这个地址可能不同,因为不同的编译器和链接器可能会将它放在不同的地方,没有“标准”放置函数。
此外,由于您使用格式"%d"
来打印指针,因此技术上的行为未定义。要打印指针,您应使用"%p"
格式,并将指针转换为void *
(有关详情,请参阅this printf
(and family) reference)。
答案 1 :(得分:3)
printf("%d", u);
在上面的行u
是指向函数的指针。当您将此地址解释为int
并打印时,行为未定义。