三种方法对比并练习理解函数指针
1.基本法
#include<stdio.h>
#pragma warning(disable:4996)
#pragma warning(disable:4715)
//指向函数的指针作为函数的参数
//有两个整数a,b,让用户输入1,2或者3,当输入1时,给出相对大值,当输入2时,给出相对小值,当输入3时,给出两者之和
//1.可以用switch函数来实现(代码比较繁琐)
int main()
{
int lager(int a, int b);
int smaller(int a, int b);
int sum(int a, int b);
int a,b,t,r;
printf("please input two integrity,split them with space:\n");
scanf("%d %d",&a,&b);
while(1)
{
printf("\n");
printf("now it is your chioce:\n");
printf("********************************\n");
printf("* TIPS *\n");
printf("* To get lager? input 1 *\n");
printf("* To get smaller? input 2 *\n");
printf("* To get sum? input 3 *\n");
printf("********************************\n");
printf("now what's your chioce?\n");
scanf("%d",&t);
switch (t)
{
case 1:
{
r = lager(a,b);
printf("lager is %d\n",r);
break;
}
case 2:
{
r = smaller(a,b);
printf("smaller is %d\n",r);
break;
}
case 3:
{
r = sum(a,b);
printf("sum is %d\n",r);
break;
}
default:
{
printf("input error!\n");
break;
}
}
printf("\n");
}
return 0;
}
int lager(int a, int b)
{
if(a-b>0)
return a;
else
return b;
}
int smaller(int a, int b)
{
if(a-b>0)
return b;
else
return a;
}
int sum(int a, int b)
{
return a+b;
}
2.指向函数的指针 作为 函数 参数
#include<stdio.h>
#pragma warning(disable:4996)
#pragma warning(disable:4715)
//指向函数的指针作为函数的参数
//有两个整数a,b,让用户输入1,2或者3,当输入1时,给出相对大值,当输入2时,给出相对小值,当输入3时,给出两者之和
//2.利用函数的指针作为函数参数来实现(每次调用的是同一个函数,入参函数不同,需要多写一个函数)
int main()
{
int lager(int a, int b);
int smaller(int a, int b);
int sum(int a, int b);
//声明函数multi_func,三个形参,两个整数,一个函数指针
int multi_func(int,int,int(*p)(int,int));
int a,b,t,r;
printf("please input two integrity,split them with space:\n");
scanf("%d %d",&a,&b);
while(1)
{
printf("\n");
printf("now it is your chioce:\n");
printf("********************************\n");
printf("* TIPS *\n");
printf("* To get lager? input 1 *\n");
printf("* To get smaller? input 2 *\n");
printf("* To get sum? input 3 *\n");
printf("********************************\n");
printf("now what's your chioce?\n");
scanf("%d",&t);
switch (t)
{
case 1:
{
r = multi_func(a,b,lager);
printf("lager is %d\n",r);
break;
}
case 2:
{
r = multi_func(a,b,smaller);
printf("smaller is %d\n",r);
break;
}
case 3:
{
r = multi_func(a,b,sum);
printf("sum is %d\n",r);
break;
}
default:
{
printf("input error!\n");
break;
}
}
printf("\n");
}
return 0;
}
int lager(int a, int b)
{
if(a-b>0)
return a;
else
return b;
}
int smaller(int a, int b)
{
if(a-b>0)
return b;
else
return a;
}
int sum(int a, int b)
{
return a+b;
}
int multi_func(int x,int y,int (*p)(int,int))
{
int result;
result = (*p)(x,y);
return result;
}
3.定义指向函数的指针 调用 函数
#include<stdio.h>
#pragma warning(disable:4996)
#pragma warning(disable:4715)
//指向函数的指针作为函数的参数
//有两个整数a,b,让用户输入1,2或者3,当输入1时,给出相对大值,当输入2时,给出相对小值,当输入3时,给出两者之和
//3.通过函数指针来调用函数(每次将函数入口参数传入函数指针)
int main()
{
int lager(int a, int b);
int smaller(int a, int b);
int sum(int a, int b);
int (*q)(int,int);
int a,b,t,r;
printf("please input two integrity,split them with space:\n");
scanf("%d %d",&a,&b);
while(1)
{
printf("\n");
printf("now it is your chioce:\n");
printf("********************************\n");
printf("* TIPS *\n");
printf("* To get lager? input 1 *\n");
printf("* To get smaller? input 2 *\n");
printf("* To get sum? input 3 *\n");
printf("********************************\n");
printf("now what's your chioce?\n");
scanf("%d",&t);
switch (t)
{
case 1:
{
q = lager;
r = (*q)(a,b);
printf("lager is %d\n",r);
break;
}
case 2:
{
q = smaller;
r = (*q)(a,b);
printf("result is %d\n",r);
break;
}
case 3:
{
q = sum;
r = (*q)(a,b);
printf("result is %d\n",r);
break;
}
default:
{
printf("input error!\n");
break;
}
}
printf("\n");
}
return 0;
}
int lager(int a, int b)
{
if(a-b>0)
return a;
else
return b;
}
int smaller(int a, int b)
{
if(a-b>0)
return b;
else
return a;
}
int sum(int a, int b)
{
return a+b;
}
蜻蜓点水能产卵,高手过招点到为止才能有内味,学习蜻蜓点水,点到为止,浅尝辄止,那就GG了。