int (p)(int)
p首先与 * 结合,p是个指针,
再与(int)结合,p指向参数为一个int的函数
再与int结合,p指向一个返回值为int的参数为一个int的函数
int p()是返回指针的函数
()表示函数
int 表示返回值为指针
https://blog.csdn.net/weixin_44421707/article/details/90722989
可以运行代码查看函数地址值,来理解.
#include <stdio.h>
/* int (*p)(int)
p首先与*结合,p是个指针,
再与(int)结合,p指向参数为一个int的函数
再与int结合,p指向一个返回值为int的参数为一个int的函数*/
/* int (*p)(int)是函数百指针,度如:
int func(int x); //声明一个函数
int (*f) (int x); //声明一个函数指针
f=func; //将func函数的首地问址赋给指针f
int* p(int x);是一个返回值答为int型指针的函数的声明
可以专用typedef 定义属函数指针类型,用于定义函数指针;
这个程序功能就是输入一个数字 ,然后对其输出格式进行选择(1代表二进制输出,2代表八进制,3是十六进制输出)。
其中change函数便是一个选择函数,按下1或者2或者3进行对应函数选择工作,主函数中先将num值传递给change,而
后change再将其传给two等转换函数,在change函数中,p便是选择指向函数的指针,main函数先将two等函数入口地址
传递给change中形参,change函数在对其进行调用。
*/
int change(int a,int (*p)(int a)); //p指向一个返回值为int的参数为一个int的函数
int two(int a);
int eight(int a);
int main()
{
int num;
int choice;
int res;
int *p = NULL;
//int sixteen(int a);
printf("Enter an integer:");
scanf("%d",&num);
printf("Bin output press 1\
Octal output press 2\
Hex output press 3\
Please enter your choice:\n");
scanf("%d",&choice);
if(choice == 1)
{
printf("Bin:");
printf("main.two的地址为:%d\n",two);
change(num, two);
}
if(choice == 2)
{
printf("Octal:");
change(num, eight);
}
if(choice == 3)
{
printf("Hex:");
printf("%X",num);
//change(num, sixteen);
}
printf("\n");
return 0;
}
int change(int a,int (*p)(int a))
{
printf("p的地址为:%d\n",p);
int res;
res = (*p)(a);
printf("%d\n",res);
}
int two(int a)
{
printf("two的地址为:%d\n",two);
int i,res=0,k=1;
while( a )
{
i = a % 2;
res = k*i + res;
k = k*10;
a = a /2;
}
return res;
}
int eight(int a)
{
int i,res=0,k=1;
while( a )
{
i = a % 8;
res = k*i + res;
k = k*10;
a = a / 8;
}
return res;
}