当我写这段代码时:
#include <stdio.h>
int main()
{
printf("%p\n",main);
printf("%d\n",main);
return 0;
}
我的编译器向我显示了这个输出:
00401318
4199192
我有兴趣知道实际印刷的是什么。我搜索了我的问题,但没有找到任何结果。 :(
提前致谢。
答案 0 :(得分:4)
这个定义不明确。
您正在使用%p
,它需要void *
类型的参数,但实际上您传递的是int (*)()
类型的值,即您的(也是定义错误的){ {1}}功能。
您无法将函数指针移植到main()
,因此您的代码永远不会正确。
在大多数典型系统void *
上,您只需将值解释为sizeof (void *) == sizeof main
,这可能只是函数的地址。
使用格式说明符void *
将函数地址传递给printf()
的情况更糟,因为很可能%d
然后您会得到未定义的行为。
这不是很好的代码。
答案 1 :(得分:3)
main
是类型为int(*)(void)
的函数指针
printf("%p\n", main);
您正在打印该指针的地址,该地址已在您的平台上成功投射到void*
。如果sizeof(main) == sizeof(void*)
,这将没有问题。
printf("%d\n", main);
这将为您提供未定义的行为,因为%d
不是指针类型的良好格式说明符。