指针函数需求,利用指针函数,输入学生号,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;
}
可以看下篇:魔鬼的 函数指针数组!!!