什么是功能指针敲打
What are Function Pointers Ponting To?
考虑以下代码和输出:
#include <iostream>
int Add(int a, int b) {
return a + b;
}
int Subtract(int a, int b) {
return a - b;
}
int main() {
int (*fn1)(int, int);
int (*fn2)(int, int);
fn1 = &Add;
fn2 = &Subtract;
std::cout << "fn1 = " << fn1 << "n";
std::cout << "*fn1 = " << *fn1 << "n";
std::cout << "fn2 = " << fn2 << "n";
std::cout << "*fn2 = " << *fn2 << "n";
}
输出:
fn1 = 1
*fn1 = 1
fn2 = 1
*fn2 = 1
作为指针,我希望fn1
和fn2
是内存地址,我真的不知道对*fn1
和*fn2
的期望。根据Wikipedia的说法,"功能指针指向内存中可执行代码",但我看不出"内存中可执行代码"中的" 1"。
*fn1
是一个函数lvalue,这种值在大多数情况下衰减了指向该功能的指针,包括当以函数呼叫参数为单位时。
您可以消除衰减的结果,以获取另一个功能lvalue,ad infinitum: *****fn1
, ***********fn1
等。
什么是函数指针敲打?
这取决于它是哪种功能指针。对于非会员函数指针(如示例中),指针通常指向该函数的实际代码(尽管在某些架构(例如PowerPC)上,它可能指向一个特殊的"函数描述符"):
要检查该值,您应该将其打印为void *
,而不是bool
(这是您在示例中所做的)。
std::cout << "fn1 = " << (void*)fn1 << std::endl;
检查它的另一种方法是使用调试器。例如,在GDB中:
(gdb) p/a fn1
(gdb) p/a fn2
相关文章:
- 链表删除功能的单指针 // 是可能的
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- char* 除了作为C++中的指针之外,还有其他功能吗?
- 具有小对象优化功能的智能指针
- 如何定义和设置指向模板类方法的功能指针
- 将状态传递给功能指针
- 如何使用指针向量为班级制作复制功能
- 我对C 中共享指针列表进行排序的功能未完成类型
- 如何使用结构内的功能指针调用私有函数
- 如何将自己的智能指针传递到功能
- 模板功能以检查智能指针是否为空
- 如何存储指针以功能模板,该模板将可呼叫对象作为其参数之一
- 功能指针不起作用(C )
- 将C 方法作为功能指针传递
- 字符指针功能以复制C 中的字符串
- 指针?指针功能
- 反向指针功能问题
- 无效指针功能的输出
- 更好地解释C++指针功能
- 用memcpy c 读取并写入指针功能