gpt4 book ai didi

c++ - 函数指针存储的地址在哪里

转载 作者:搜寻专家 更新时间:2023-10-31 00:18:40 26 4
gpt4 key购买 nike

我知道函数指针存储函数的地址。

int fun(int x){
//return something
}
int (pfun*)(int)=&fun;

int main(){

std::cout << &fun << "\n"; // this print out 1
std::cout << fun << "\n" ; // this print out 1
std::cout << &pfun << "\n"; // this print out 0x0022ff40
std::cout << pfun << "\n" ; // this print out 1

}

所以我的问题是:
1) 如果 fun() 甚至没有地址,pfun 怎么能指向 fun()。
2) 例如在动态绑定(bind)中,当我在运行时使用指针函数时。编译器是否将 pfun 值更改为像 0X 这样的真实指针......以便在运行时知道要调用哪个函数,因为名称在编译后不存在?

最佳答案

表达式 fun&fun同义:&fun这相当于存储在 pfun 中的值,所以难怪他们三个产生相同的输出。 &pfun是指针的地址,也就是变量的地址。

现在的问题是为什么1 ...嗯,答案是没有重载 operator<<这需要 std::ostream和一个函数指针,因此编译器会尝试在现有重载中找到最佳匹配,恰好是 bool (函数指针可以隐式转换为 bool )。函数指针将转换为 false仅当函数指针为空时,情况并非如此。 true值最终打印为 1 (您可以通过执行以下操作来检查:std::cout << std::boolalpha << fun 将打印 true)。

如果你想获得函数的实际地址(在这个过程中)你可以强制转换为一个空指针并打印结果。这在技术上可能不正确,但它会给你一个不同于 1 的数字。 ...请注意,该值在不同的运行中可能会有所不同,并且基本上没有任何意义。

关于c++ - 函数指针存储的地址在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10038491/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com