C/C++中函数main()的地址

Art*_*yle 4 c c++ pointers function-pointers

有没有办法在C或C++中找到main()的地址?既然它本身就是一个功能,它会有自己的地址吗?

Lig*_*ica 15

C

当然.只需继续做吧.

#include <stdio.h>

int main(void)
{
   printf("%p\n", &main);
}
Run Code Online (Sandbox Code Playgroud)

C++

不允许携带main地址,因此,为了您的目的,没有一个地址:

[C++11: 3.6.1/3]:函数main不得在程序中使用.[..]

但是,在GCC中,您可以采用与C相同的方法,通过编译器扩展:

#include <iostream>

int main()
{
   std::cout << (void*)&main << '\n';
}
Run Code Online (Sandbox Code Playgroud)

您将收到一条不符合要求的警告.

  • 不幸的是,C中的那个例子有未定义的行为.`%p`采用`void*`,而不是`int(*)(void)`.没有可移植的方法来打印函数指针,在对象和函数指针之间没有可移植的转换方式. (6认同)
  • 这个问题被错误地标记为C和C++.这个答案对于C++是正确的,但对于C不正确. (2认同)