确认对函数指针的理解 作为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;