C语言指针函数,函数指针练习demo

指针函数需求,利用指针函数,输入学生号,0,1,2打印学生的所有成绩,学生成绩用3行4列的二维数组,表示有3位学生,学生有4科成绩

#include <stdio.h>


/*
利用指针函数,返回函数的指针
demo输入学生号,返回学生的成绩,3个学生,4们成绩
*/
								// (*pscores)[4] 数组的指针
int* getPosPersion(int pos, int (*pscores)[4])
{
	int *p;
	p = (int*)(pscores+pos);		//pscores是3行4列的首地址,pos是行的偏移量,p就是获得行的首地址
	return p;
}

int main()
{
	int scores[3][4]={
		{21,31,44,51},
		{61,62,63,64},
		{81,82,83,84}
		};
	int *ppos;
	int pos; //学生学号0,1,2
	int i;
	printf("请输入你需要看的学生号数:0,1,2\n");
	scanf("%d",&pos);
	
	ppos = getPosPersion(pos,scores);	//ppos返回行的首地址
	
	
	printf("%d号学生成绩:\n", pos);
	for(i=0;i<4;i++)
	{
		printf("%d ",*(ppos+i));
	}
	
	return 0;
}

利用函数指针实现需求:
键盘输入1,2,3三种数字,1获取两个数字中的最大值,2获取两个数字中的最小值,3获取两个数字的求和

#include <stdio.h>

/*
利用函数指针实现需求
键盘输入1,2,3
1获取两个数字中的最大值
2获取两个数字中的最小值
3获取两个数字的求和
*/


int getMax(int date1,int date2)
{
	return date1 > date2 ? date1 : date2;
}

int getMin(int date1,int date2)
{
	return date1 < date2 ? date1 : date2;
}

int getSum(int date1,int date2)
{
	return date1 + date2;
}


int dateHander(int date1,int date2,int (*pfunc)(int a, int b))
{
	int ret;
	
	ret = (*pfunc)(date1,date2);	//pfunc是一个函数指针,是一个地址,地址取*就是函数名
	return ret;
}


int main()
{
	int a = 10;
	int b = 50;
	int cmd;
	int result;
	
	int (*pfunc)(int a, int b);	//定义一个函数指针
	
	printf("请输入1(取大值),2(取小值),或者3(求和)\n");
	scanf("%d",&cmd);
	
	switch(cmd)
	{
		case 1:
			pfunc = getMax;
			break;
		case 2:
			pfunc = getMin;
			break;
		case 3:
			pfunc = getSum;
			break;
		default:
			printf("输入错误!@输入1(取大值),2(取小值),或者3(求和)\n");
			break;
	
	};
	
	result = dateHander(a,b,pfunc);
	printf("结果是:%d \n",result);
	
	return 0;
}

可以看下篇:魔鬼的 函数指针数组!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值