关于C++ 一个程序的解读。

来源:百度知道 编辑:UC知道 时间:2024/05/21 12:09:43
// pointer to functions
#include <iostream.h>

int addition (int a, int b) {
return (a+b);
}

int subtraction (int a, int b) {
return (a-b);
}

int (*minus)(int,int) = subtraction;
int operation (int x, int y, int (*functocall)(int,int)) {
int g;
g = (*functocall)(x,y);
return (g);
}

int main () {
int m,n;
m = operation (7, 5, addition);
n = operation (20, m, minus);
cout <<n;
return 0;
}

int operation (int x, int y, int (*functocall)(int,int)) {
//这句话不懂。
functocall指的是什么?
还有这句是怎么执行的。
int (*minus)(int,int) = subtraction
//那后来的minus又去哪了?

补充:

int (*minus)(int,int) = subtraction
//那后来的minus又去哪了?

这个和
int k;
int *minus=&k;
是一样的道理。

后面main函数里有:n = operation (20, m, minus);
意思是minus作为这个函数内部的执行函数。

具体你可以先回顾一下函数指针的相关章节以及指针的深入内容堆 栈

int x,int y都是形参,这个你知道。

int (*functocall)(int,int)

这个是函数指针,指向函数的地址。
比如
void func(int i,int j){}
int (*functocall)(int,int)=func;

(int,int)省略了参数名,意思是只要是返回类型为int,两形参,且参数类型为int,int,都可以被functocall指针所指向。
函数指针声明的固定命名格式是:

typename (*fp_name)(parameter_list);

那么,functocall就可以等效于函数func的名字,这样的作用是把函数调用也变成可自动调节的对象

functocall是函数指针,可以指向为参数一样,返回一样的所有类型函数
比如m=operation(7,5,addition(a,b)),所以m就等于12;
而n=operation(20,m,minus(a,b)),所以n就等于20-12=8

把一个函数指针作为参数传进来