确认对函数指针的理解 作为C++学习者,我从C++语言教程中发现了下面的代码,并提出了两个问题,任何专家都能提供一些指导吗? #include <iostream> using namespace std; int addition (int a, int b) { return (a+b); } int subtraction (int a, int b) { return (a-b); } int operation (int x, int y, int (*functocall)(int,int)) { int g; g = (*functocall)(x,y); return (g); } int main () { int m,n; int (*minus)(int,int) = subtraction; m = operation (7, 5, addition); n = operation (20, m, minus); cout <<n; return 0; } #包括 使用名称空间std; 整数加法(整数a,整数b) {返回(a+b);} 整数减法(整数a,整数b) {返回(a-b);} 整数运算(整数x,整数y,整数 (*函数调用)(int,int)) { int g; g=(*函数调用)(x,y); 回报率(g); } int main(){ int m,n; int(*减)(int,int)=减法; m=操作(7,5,加法); n=操作(20,m,负); 在我开始之前,您的代码使用的括号比它需要的多得多

确认对函数指针的理解 作为C++学习者,我从C++语言教程中发现了下面的代码,并提出了两个问题,任何专家都能提供一些指导吗? #include <iostream> using namespace std; int addition (int a, int b) { return (a+b); } int subtraction (int a, int b) { return (a-b); } int operation (int x, int y, int (*functocall)(int,int)) { int g; g = (*functocall)(x,y); return (g); } int main () { int m,n; int (*minus)(int,int) = subtraction; m = operation (7, 5, addition); n = operation (20, m, minus); cout <<n; return 0; } #包括 使用名称空间std; 整数加法(整数a,整数b) {返回(a+b);} 整数减法(整数a,整数b) {返回(a-b);} 整数运算(整数x,整数y,整数 (*函数调用)(int,int)) { int g; g=(*函数调用)(x,y); 回报率(g); } int main(){ int m,n; int(*减)(int,int)=减法; m=操作(7,5,加法); n=操作(20,m,负); 在我开始之前,您的代码使用的括号比它需要的多得多,c++,pointers,function-pointers,C++,Pointers,Function Pointers,以下是相同的代码,格式更好,代码更精简: #include <iostream> using namespace std; int addition (int a, int b) { return a+b; } int subtraction (int a, int b) { return a-b; } int operation (int x, int y, int (*functocall)(int,int)) { int g; g = functocall(x,y)

以下是相同的代码,格式更好,代码更精简:

#include <iostream>

using namespace std;

int addition (int a, int b)
{ return a+b; }
int subtraction (int a, int b)
{ return a-b; }
int operation (int x, int y, int (*functocall)(int,int))
{
  int g;
  g = functocall(x,y);
  return g;
}

int main () {
  int m,n;
  int (*minus)(int,int) = subtraction;
  m = operation (7, 5, addition);
  n = operation (20, m, minus);
  cout <<n<<"\n";

  return 0;
}
使用函数指针时不需要显式取消引用,原因与首先获取其地址时不需要显式使用运算符的
地址相同

问题2:对于“return(g)”,我想知道为什么我们用括号来表示g

确实没有很好的理由这样做。事实上,对于任何
return
语句,都没有理由这样做

对于主函数中的“int(*减法)(int,int)=减法;”, 如果我们写以下内容,可以吗

int (*minus)(int,int);
minus = subtraction;
就个人而言,我建议您使用:

int (*minus)(int,int) = nullptr;
minus = subtraction;
所以不要留下未初始化的变量,但是,是的,绝对是这样。指向函数变量的指针与任何其他变量一样

问题1:对于
g=(*functocall)(x,y)
,它是否遵循 指向函数(例如减法)并将其分配给g的指针

回答:没有

(*functocall)(x,y);
是一种允许的语法,用于从作为参数传递的指针调用函数。它完全等效于:

functocall(x,y);
它简单地消除了允许但不必要的
(*…)
语法

问题2:对于
return(g)
,我想知道为什么我们在 g

括号也是任意的,对报税表来说是多余的。只需提供:

return g;

所需的一切都是因为没有表达式需要随附的
(…)

提供的求值优先级。这是否回答了您的问题?请看我们的。许多“C++语言教程”都以明显的事实错误和极坏的编程风格著称。
return g;