C++ 如何获取函数的地址?

C++ 如何获取函数的地址?,c++,function,pointers,C++,Function,Pointers,函数的地址是带括号的名称。然而,当我用cout打印地址时,它是错误的 假设函数为“int function_address()”,代码为 cout<<function_address<<endl; cout 函数的地址是带括号的名称 函数的地址不是它的名称。它是一个内存地址,如运行程序的进程中的0x00000000000D57(在Linux上,您可以使用nm获取全局函数的地址)。 函数名在运行时< /强>被忽略(与相关的除外,并且该概念不是标准C++,而是与实现相关)。

函数的地址是带括号的名称。然而,当我用cout打印地址时,它是错误的

假设函数为“int function_address()”,代码为

cout<<function_address<<endl;
cout
函数的地址是带括号的名称

函数的地址不是它的名称。它是一个内存地址,如运行程序的进程中的
0x00000000000D57
(在Linux上,您可以使用
nm
获取全局函数的地址)。 <强>函数名在运行时< /强>被忽略(与相关的除外,并且该概念不是标准C++,而是与实现相关)。您甚至可以创建可执行文件的符号表。函数名只在编译时和链接时起作用

通常情况下,无法从函数的地址获取函数名

当然,在中,如果表达式只有一个函数名(例如,指数),则该表达式将函数的地址作为其值。或例如:

extern void fun(int); /// declare the function fun, defined elsewhere.
auto fp = fun;
然后,
fp
是指向一个函数的指针,该函数只接受一个参数,一个整数,并且不返回任何内容(void)。与
fun
类似,此指针
fp
保存函数的地址(不是名称),并且在构建时使用函数fun()的地址初始化指针
fun
(例如,编译器和链接器在运行时不会发生任何事情)。因此
std::cout
函数的地址是带括号的名称

函数的地址不是它的名称。它是一个内存地址,如运行程序的进程中的
0x00000000000D57
(在Linux上,您可以使用
nm
获取全局函数的地址)。 <强>函数名在运行时< /强>被忽略(与相关的除外,并且该概念不是标准C++,而是与实现相关)。您甚至可以创建可执行文件的符号表。函数名只在编译时和链接时起作用

通常情况下,无法从函数的地址获取函数名

当然,在中,如果表达式只有一个函数名(例如,指数),则该表达式将函数的地址作为其值。或例如:

extern void fun(int); /// declare the function fun, defined elsewhere.
auto fp = fun;

然后,
fp
是指向一个函数的指针,该函数只接受一个参数,一个整数,并且不返回任何内容(void)。与
fun
类似,此指针
fp
保存函数的地址(不是名称),并且在构建时使用函数fun()的地址初始化指针
fun
(例如,编译器和链接器在运行时不会发生任何事情)。因此,
std::cout,但“ptr=func_name;”的代码实际上可以工作,但不能计算函数名。@MichaelTsai这只是一个隐式转换。编译器将其转换为
ptr=&func\u name
std::cout,但“ptr=func\u name;“实际上可以工作,但它不计算函数名。@ Migeltsi,这只是一个隐式转换。编译器将其转换成<代码> PTR=和函数名;<代码> >代码:STD::CUT,您缺少C++标签(可能是C++ 11)。您缺少C++标签(可能是C++ 11)。