1、函数指针求最大值
定义一个函数求函数最大值,通过函数指针调用,代码如下,
#include <stdio.h> int Max(int, int); //函数声明 int main(void) { int(*p)(int, int); //定义一个函数指针 int a, b, c; p = Max; //把函数Max赋给指针变量p, 使p指向Max函数 printf("请输入 a 和 b:"); scanf("%d%d", &a, &b); c = (*p)(a, b); //通过函数指针调用Max函数 printf("a = %d\nb = %d\nmax = %d\n", a, b, c); return 0; } int Max(int x, int y) //定义Max函数 { int z; if (x > y) { z = x; } else { z = y; } return z; }
注意:*
和函数名要用括号括起来,否则因为运算符的优先级原因就变成指针函数。
2、指针作为函数参数
使用函数时需要有多个返回值,此时可以使用指针作为函数参数,通过输入的学生数量和每个学生的学号和成绩,找出成绩最高学生的学号和学分,代码如下,
#include <stdio.h> #define N 40 void FindMax(int score[],long num[],int n,int *pMaxScore,long *pMaxNum) { int i; *pMaxScore=score[0];//假设第一个同学为最高分 *pMaxNum=num[0];//记录当前学生学号 for (i=1;i<n;i++) { if (score[i]>*pMaxScore)//获得最高分 { *pMaxScore=score[i];//不用交换,直接覆盖值 *pMaxNum=num[i]; } } } int main() { int score[N],maxScore; int n,i; long num[N],maxNum; printf("请输入学生数量:\n"); scanf("%d",&n); printf("n = %d\n",n); printf("请输入学号 ID 和 学分:\n"); for (i=0;i<n;i++) { scanf("%ld%d",&num[i],&score[i]); } FindMax(score,num,n,&maxScore,&maxNum); printf("maxScore=%d,maxNum=%ld\n",maxScore,maxNum); return 0; }
3、指针作为函数返回值
返回指针的函数,主体是函数,返回值是一个指针,也就是指针函数。使用函数时返回字符串,就需要用到指针函数,代码如下,
#include <stdio.h> char* getword(char); char* getword(char c) { switch (c) { case'C':return "C/C++/C#"; case'J':return "Java"; case'P':return "Python"; case'L':return "Linux"; default:return "CJAVAPY"; } } int main() { char input; printf("请输入一个大写字母:\n"); scanf("%c", &input); printf("%s\n", getword(input)); }