使用printf()函数在C中写函数名时打印的内容

时间:2014-12-10 14:45:28

标签: c function

当我写这段代码时:

#include <stdio.h>

int main()
{
    printf("%p\n",main);
    printf("%d\n",main);
    return 0;
}

我的编译器向我显示了这个输出:

00401318
4199192

我有兴趣知道实际印刷的是什么。我搜索了我的问题,但没有找到任何结果。 :(

提前致谢。

2 个答案:

答案 0 :(得分:4)

这个定义不明确。

您正在使用%p,它需要void *类型的参数,但实际上您传递的是int (*)()类型的值,即您的(也是定义错误的){ {1}}功能。

您无法将函数指针移植到main(),因此您的代码永远不会正确。

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

使用格式说明符void *将函数地址传递给printf()的情况更糟,因为很可能%d然后您会得到未定义的行为。

这不是很好的代码。

答案 1 :(得分:3)

main是类型为int(*)(void)函数指针

  1. printf("%p\n", main);
  2. 您正在打印该指针的地址,该地址已在您的平台上成功投射到void*。如果sizeof(main) == sizeof(void*),这将没有问题。

    1. printf("%d\n", main);
    2. 这将为您提供未定义的行为,因为%d不是指针类型的良好格式说明符。