C语言函数调用类的问题,急求解释

#include <stdio.h>
void MyFun1(int x);
void MyFun2(int x);
void MyFun3(int x);
typedef void (*FunType) (int );// 定义一个函数指针类型FunType,与下面定义函数的类型一致
void CallMyFun(FunType fp,int x);//函数从这开始调用
int main(int argc, char* argv[])
{
CallMyFun(MyFun1,10);//假设调用此变量
CallMyFun(MyFun2,20);
CallMyFun(MyFun3,30);
return 0;
}

void CallMyFun(FunType fp,int x)//进入函数FunType fp
{
fp(x); //fp(x); fp是什么意思,还有什么叫做通过fp的指针执
} //行传递进来的函数,注意fp所指的函数是有一个参数的
void MyFun1(int x)// 这是一个有参数的函数,一下两个函数也相同。//fp的参数,参数在哪
{
printf("函数MyFun1中输出: %d\n",x);//如何最后将变量fp(x)输出
}
void MyFun2(int x)
{
printf("函数MyFun2中输出: %d\n",x);
}
void MyFun3(int x)
{
printf("函数MyFun3中输出: %d\n",x);
}
请给我一个合理并且易懂的解释,c语言小白谢谢。

void CallMyFun(FunType fp,int x);是一个包含函数指针的函数!
fp只是函数指针的名称,是 CallMyFun函数的形参,这个名称你可以随便取的
当调用CallMyFun(MyFun1,10);//假设调用此变量时,
fp指代的就是MyFun1函数,而MyFun1的参数哪里来?就是通过CallMyFun的第2个参数传递进来的,这里是10
所以运行CallMyFun(MyFun1,10);函数,其实就是运行了call MyFun1(10)
所以运行CallMyFun(MyFun2,20);函数,其实就是运行了call MyFun2(20)
所以fp(x)指代的是一个函数,如果要输出他的结果,那在定义MyFun1,MyFun2时,函数就需要有返回值,而不能用void
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-01-04
#include <stdio.h>
void MyFun1(int x);
void MyFun2(int x);
void MyFun3(int x);
typedef void (*FunType) (int );// 定义一个函数指针类型FunType,与下面定义函数的类型一致
void CallMyFun(FunType fp,int x);//函数从这开始调用
int main(int argc, char* argv[])
{
CallMyFun(MyFun1,10);//假设调用此变量
CallMyFun(MyFun2,20);
CallMyFun(MyFun3,30);
return 0;
}

void CallMyFun(FunType fp,int x)//进入函数FunType fp

fp(x); //fp(x); fp是什么意思,还有什么叫做通过fp的指针执

/*解释如下:
1、fp是函数指针,因为它是函数指针类型FunType指针变量。
2、在执行CallMyFun函数时,实参MyFun1把函数地址(函数名就是函数的首地址)传递给函数指针fp,实参10传递给x,
那么,fp=MyFun1了,即函数指针fp就指向了函数MyFun1;x=10了。
3、fp(x),通过函数指针fp执行函数MyFun1,<==>执行MyFun1(x);语句,这里可以通过函数指针来执行该函数,是因为该
函数指针fp执行了MyFun1()函数,这是一种间接的方式来调用函数。
4、执行fp(x);语句,那么就转去执行MyFun1()函数了,将实参x=10传递给MyFun1()函数的形参x,这两个参数虽然同名,但是
在不同的内存单元里,然后打印出: 函数MyFun1中输出: 10。
5、MyFun2、MyFun3同上面的道理是一样,就不再累赘了。
*/

} //行传递进来的函数,注意fp所指的函数是有一个参数的
void MyFun1(int x)// 这是一个有参数的函数,以下两个函数也相同。//fp的参数,参数在哪
{
printf("函数MyFun1中输出: %d\n",x);//如何最后将变量fp(x)输出
}
void MyFun2(int x)
{
printf("函数MyFun2中输出: %d\n",x);
}
void MyFun3(int x)
{
printf("函数MyFun3中输出: %d\n",x);
}

本回答被提问者采纳
第2个回答  2018-03-30
CallMyFun(FunType fp,int x)这是一个“高阶函数”,它的第一个参数fp是一个函数,第二个参数x是第一个参数的参数,fp(x)就是把第一个参数fp当做一个函数调用,并且将x作为它的参数传递。
第3个回答  2018-03-30
void CallMyFun(FunType fp,int x)//进入函数FunType fp
{
fp(x); //fp(x); fp是什么意思,还有什么叫做通过fp的指针执
} //行传递进来的函数,注意fp所指的函数是有一个参数的
解释:函数CallMyFun(FunType fp,int x)有两个参数
第一个参数:FunType fp; 为函数指针
第二个参数:int x; 为一个整形数,用于传递给函数指针fp
比如:CallMyFun(MyFun1,10);//假设调用此变量
就是调用函数MyFun1,并且在CallMyFun中把10作为参数传递给MyFun1
相似回答