函数指针和指针函数
一.函数指针如何定义
函数指针:
定义:如果在程序中定义了一个函数,在编译时,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址(又称入口地址)称为这个函数的指针
指向函数的指针变量,本质就是个指针。
函数指针是一个指针变量
函数名就是地址
写法:int (*p)(int a,int b)–数据类型 (*函数名)(形参1,形参2)
使用函数指针
二.使用函数指针
有两个整数a和b,由用户输入1,2或3,如输入1,程序就给出a和b中大者,输入2,就给出a和b中小者,输入3,则求a和b之和`
#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 getsum(int data1,int data2){
return data1+data2;
}
int dataHandler(int data1,int data2,int (*func)(int data1,int data2))
{
int ret;
ret=(*func)(data1,data2);
return ret;
}
int main()
{
int a=10;
int b=10;
int cmd;
int ret;
int (*func)(int data1,int data2);//定义函数指针
printf("请输入1(取大值),2(取小值),3(求和)\n");
scanf("%d",&cmd);
switch(cmd){
case 1:
func=getmax;
break;
case 2:
func=getmin;
break;
case 3:
func=getsum;
break;
default:
printf("输入错误!@请输入1(取大值),2(取小值),3(求和)\n");
exit(-1);
break;
}
ret=dataHandler(a,b,func);//传参
printf("ret=%d\n",ret);
return 0;
}
三.如何定义指针函数
指针函数:
就是返回指针值的函数
写法–int *ppos=getPosPerson(pos,scores);
//定义一个指针指向指针函数
指针函数:int *getPosPerson(int pos,int (*pstu)[4])
四.使用指针函数
有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]={
{55,66,77,88},
{66,55,99,100},
{11,22,33,59},
};
int *ppos;
int pos;
printf("请输入你需要看的学生号数:0,1,2\n");
scanf("%d",&pos);
ppos=getPosPerson(pos,scores);
for(int i=0;i<4;i++){
printf("%d ",*ppos++);
}
return 0;
}