如何解决(long)someFunction 输出什么?
这些值在以下代码中代表什么或来自什么?
4196598
1
#include <iostream>
using namespace std;
void someFunction() {
cout << "someFunction" << endl;
}
int main()
{
cout << long(someFunction) << endl;
cout << someFunction << endl;
return 0;
}
解决方法
它实际上是函数的位置(即要跳转到的指令的位置),将其强制转换为 long,为我们提供编号,该编号可能会在多次调用期间发生变化。
在gdb中调试同样的代码,可以得到16进制的位置,像这样-
当您将十六进制数转换为十进制数时,您将得到 93824992235913...这就是演员表给我们的。
关于函数及其函数名称的含义,Why is using the function name as a function pointer equivalent to applying the address-of operator to the function name? 中有大量知识。
引用那里的一条评论,
函数名实际上只是内存地址上的一个标签。环境实际上并没有看到单独的函数和指向它们的指针——它只是看到一个指向地址的指令分支。这与环境将使用不同寻址模式(直接或间接)的对象不同
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。