立马就要期末考试了, 函数指针还有些不明白

马上就要期末考试了, 函数指针还有些不明白
求两数和、两数积。

//问什么调用函数的的时候参数里还要加其他函数名?
//可以讲一下整个程序的运行过程吗?

#include<stdio.h>
int add(int m,int n)
{
 return m+n;
}
int mul(int m,int n)
{
 return m*n;
}
int fun(int (*p)(),int a,int b)//?看不懂了
{
 return (*p)(a,b);
}
void main()
{
 int result,a,b;
 printf("请输入两个整数a和b的值:");
 scanf("%d%d",&a,&b);
 result=fun(add,a,b);//??不明白了
 printf("两个数的和为:%d\n",result);
 result=fun(mul,a,b);//??
 printf("两个数的积为:%d\n",result);
}

------解决思路----------------------
int (*p)(),定义了一个函数指针,它指向一个函数(其实就是一个函数的地址),该函数返回值为int,没有参数。


int fun(int (*p)(),int a,int b)
{
 return (*p)(a,b);
}

该fun函数有三个参数,第一个是一个函数指针,第二个第三个都是一个int变量

这个函数的实现应该是错误的,因为给出的函数指针指向的函数应该是没有参数的,但是在使用的时候确传了两个参数进去
这个函数指针应该是这样的:

int fun(int (*p)(int, int),int a,int b)
{
 return (*p)(a,b);
}

------解决思路----------------------
看在40分的份上:(英雄为五斗米折腰!)
#include<stdio.h>
int add(int m,int n)
{
 return m+n;
}
int mul(int m,int n)
{
 return m*n;
}
int fun(int (*p)(),int a,int b)//声明函数fun,带3个参数,第1个参数的类型为int (*p)(),即一个指向某类函数的指针,该类函数无参数,返回int
{
 return (*p)(a,b);//调用p指向的函数,并将参数a,b传入。
}
void main()
{
 int result,a,b;
 printf("请输入两个整数a和b的值:");
 scanf("%d%d",&a,&b);
 result=fun(add,a,b);//调用fun函数,参数分别为add,a,b
 printf("两个数的和为:%d\n",result);
 result=fun(mul,a,b);////调用fun函数,参数分别为mul,a,b
 printf("两个数的积为:%d\n",result);
}

该代码后缀需要用.c而非.cpp才能编译通过。因为C编译器不会阻止
int (*A)()

int (*B)(int,int)
这两种类型的变量之间互相赋值。