使用 printf() 函数在 C 中编写函数名时打印什么

Muk*_*t09 3 c function

当我写这段代码时:

#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)

我很想知道实际打印了什么。我用谷歌搜索了我的问题,但一无所获。:(

提前致谢。

unw*_*ind 5

这不是明确定义的。

您正在使用%p,它需要一个 type 参数void *,但实际上您传递的是一个 type 值int (*)(),即您的(也定义错误的)main()函数。

您不能将函数指针可移植地转换为void *,因此您的代码永远不会正确。

在大多数典型系统上,sizeof (void *) == sizeof main,因此您只需将值解释为void *,这可能只是函数的地址。

printf()使用格式说明符 of传递函数地址%d甚至更糟,因为很可能sizeof (int) != sizeof main会出现未定义的行为。

这不是好的代码。