正在打印的是垃圾值吗?
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;
}
而这个修改版的代码,returns:
4199220 on CodeBlocks
4199728 on DevC++
134521824 on OnlineIDE
134513824 on gcc 4.9.2
而且这些值似乎不会随着不同的运行而改变。
输出当然依赖于编译器,但是
请解释这个输出是如何产生的?
同声明
printf("%d", u);
您将 指针 u
打印为十进制数,即您打印 u
的值,它指向什么。
这个地址可能不同,因为不同的编译器和链接器可能会将它放在不同的地方,没有 "standard" 放置函数的地方。
此外,由于您使用格式 "%d"
来打印指针,因此该行为在技术上是 未定义。要打印指针,您应该使用 "%p"
格式,并将指针转换为 void *
(有关更多信息,请参见 this printf
(and family) reference)。
printf("%d", u);
上一行u
是一个指向函数的指针。当您将此地址解释为 int
并打印它时,行为未定义。
#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;
}
而这个修改版的代码,returns:
4199220 on CodeBlocks
4199728 on DevC++
134521824 on OnlineIDE
134513824 on gcc 4.9.2
而且这些值似乎不会随着不同的运行而改变。 输出当然依赖于编译器,但是 请解释这个输出是如何产生的?
同声明
printf("%d", u);
您将 指针 u
打印为十进制数,即您打印 u
的值,它指向什么。
这个地址可能不同,因为不同的编译器和链接器可能会将它放在不同的地方,没有 "standard" 放置函数的地方。
此外,由于您使用格式 "%d"
来打印指针,因此该行为在技术上是 未定义。要打印指针,您应该使用 "%p"
格式,并将指针转换为 void *
(有关更多信息,请参见 this printf
(and family) reference)。
printf("%d", u);
上一行u
是一个指向函数的指针。当您将此地址解释为 int
并打印它时,行为未定义。