考虑以下代码和输出:

#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


作为指针,我希望fn1fn2是内存地址,而我真的不知道对*fn1*fn2会有什么期望。根据Wikipedia,“函数指针指向内存中的可执行代码”,但我看不到“内存中的可执行代码”如何与“ 1”相对应。

最佳答案

*fn1是一个函数左值,在大多数情况下,包括作为函数调用参数传递时,该值都会衰减为该函数的指针。

您可以取消引用衰减的结果以获取另一个函数左值,无限,分别为*****fn1***********fn1等。

关于c++ - 什么是功能指针指向?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42330078/

10-11 21:57