一、用指针变量作函数参数的实例
思考题:
例题:从键盘输入某班学生某门课成绩(每班人数最多不超过40人,具体人数由键盘输入),是分析下列程序是否能实现计算并输出最高分以及相应学号。
#include <stdio.h>
#define N 40
void FindMax(int score[],long num[],int n,int pmaxscore,long pmaxnum);
int main(void)
{
int score[N],maxscore;
int n,i;
long num[N],maxnum;
printf("How many students?");
scanf("%d",&n);
printf("Input student`s ID and score:\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;
}
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];
}
}
}
错误的原因在于用普通变量作函数参数进行按值调用不能再被调函数中改变相应的参数值。虽然可以用return 语句返回最高值,但return 只能返回一个值,要的到最高分即学号这样的两个值,必须使用指针变量作函数参数,即模拟按引用调用,因此需要将程序修改如下:
#include <stdio.h>
#define N 40
void FindMax(int score[],long num[],int n,int *pmaxscore,long *pmaxnum);
int main(void)
{
int score[N],maxscore;
int n,i;
long num[N],maxnum;
printf("How many students?");
printf("\n");
scanf("%d",&n);
printf("Input student`s ID and score:\n");
for(i=0;i