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));
}