当我写这段代码时:
#include <stdio.h>
int main()
{
printf("%p\n",main);
printf("%d\n",main);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的编译器向我展示了这个输出:
00401318
4199192
Run Code Online (Sandbox Code Playgroud)
我很想知道实际打印了什么。我用谷歌搜索了我的问题,但一无所获。:(
提前致谢。
这不是明确定义的。
您正在使用%p,它需要一个 type 参数void *,但实际上您传递的是一个 type 值int (*)(),即您的(也定义错误的)main()函数。
您不能将函数指针可移植地转换为void *,因此您的代码永远不会正确。
在大多数典型系统上,sizeof (void *) == sizeof main,因此您只需将值解释为void *,这可能只是函数的地址。
printf()使用格式说明符 of传递函数地址%d甚至更糟,因为很可能sizeof (int) != sizeof main会出现未定义的行为。
这不是好的代码。