函数指针
#include <stdio.h>
void printWelcome()
{
printf("程序启动,欢迎使用\n");
}
int changData(int data)
{
return ++data;
}
int main()
{
void (*p)();
p = printWelcome;
(*p)();
int (*p2)(int data);
p2 = changData;
printf("p2=%d\n",(*p2)(10));
return 0;
}
结果
程序启动,欢迎使用
p2=11
应用回调函数
#include <stdio.h>
#include <stdlib.h>
int getMax(int data1,int data2)
{
return data1>data2?data1:data2;
}
int getMin(int data1,int data2)
{
return data1<data2?data1:data2;
}
int addData(int data1,int data2)
{
return data1+data2;
}
int dataHangler(int data1,int data2,int (*pfunc)(int ,int ))
{
int ret;
ret = (*pfunc)(data1,data2);
return ret;
}
int main()
{
int a=10;
int b=20;
int (*pfunc)(int ,int );
int cmd;
int ret;
printf("请输入1:(a,b中大的值)2:(a,b中小的值)3:(a,b的和)\n");
scanf("%d",&cmd);
switch(cmd){
case 1:
pfunc=getMax;
break;
case 2:
pfunc=getMin;
break;
case 3:
pfunc=addData;
break;
default:
printf("输入有误!\n");
exit(-1);
break;
}
ret =dataHangler(a,b,pfunc);
printf("ret = %d\n",ret);
return 0;
}
结果
请输入1:(a,b中大的值)2:(a,b中小的值)3:(a,b的和)
1
ret = 20
请输入1:(a,b中大的值)2:(a,b中小的值)3:(a,b的和)
2
ret = 10
请输入1:(a,b中大的值)2:(a,b中小的值)3:(a,b的和)
3
ret = 30
指针函数
指针函数返回指针值的函数 概念 一个函数可以返回一个整型值字符值、实型值等,也可以返回指针型的数据,即地址。其概念与以前类似,只是返回的值的类型是指针类型而已。 例如“int * a(int x,int y);",a是函数名,调用它以后能得到一个int*型(指向整型数据)的指针,即整型数据的地址。x和y是函数a的形参,为整型。 请注意在 * a两侧没有括号,在a的两侧分别为 * 运算符和( )运算符。而( )优先级高于 * ,因此a先与( )结合,显然这是函数形式。这个函数前面有一个 * ,表示此函数是指针型函数(函数值是指针)。最前面的int表示返回的指针指向整型变量。
例:有a个学生 ,每个学生有b门课程的成绩。要求在用户输人学生序号以后,能输出该学生的全部成绩。用指针函数来实现
#include <stdio.h>
int* getPosPerson(int pos,int (*pstu)[4])
{
int *p;
p = (int *)(pstu+pos);
return p;
}
int main()
{
int scores[3][4]={{77,88,99,10},{55,66,11,22},{44,88,66,11}};
int pos;
int *ppos;
printf("请输入你要查看的学生号数:\n");
scanf("%d",&pos);
ppos = getPosPerson(pos,scores);
for(int i=0;i<4;i++){
printf("%d ",*ppos++);
}
return 0;
}
结果
请输入你要查看的学生号数:
0
77 88 99 10
请输入你要查看的学生号数:
1
55 66 11 22
请输入你要查看的学生号数:
2
44 88 66 11
|