指向函数的指针,指向函数的指针作为函数参数

三种方法对比并练习理解函数指针

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了。

猜你喜欢

转载自blog.csdn.net/qq_42387372/article/details/106151608
今日推荐