谭浩强老师C语言书上的一个程序
有一个班,3个学生,各学四门功课,计算平均分数以及第n个学生的成绩。
书上给的答案是
#include <stdio.h>
void main()
{void average(float *p,int n);
void search(float (*p)[4],int n);
float score[3][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98}};
average(*score,12);
search(score,2);
printf("\n");
}
void average(float *p,int n)
{float *p_end;
float sum=0,aver;
p_end=p+n-1;
for(;p<=p_end;p++)
sum=sum+(*p);
aver=sum/n;
printf("average=%5.2f\n",aver);
}
void search(float(*p)[4],int n)
{int i;
printf("the score of No.%d are:\n",n);
for(i=0;i<4;i++)
printf("%5.2f ",*(*(p+n)+i));
}
TC3运行结果为
average=82.25
the score of No.2 are:
90.00 99.00 100.00 98.00
我把书上给的程序的第7行的average(*score,12);中的*去掉,变为average(score,12);TC3运行的结果和不去*是一样的,average仍为82.25
可书上在引出本节内容时说,使p指向一个包含m个元素的一维数组。这时,如果p先指向a[0](即p=&a[0]),则p+1不是指向a[0][1],而是指向a[1],p的增值以一维数组的长度为单位。
我想不明白,书上前后说的好像是矛盾的,如果按前面说的,average应该等于(65+80+90)/3=78.3
请高手指点下为什么 小弟这里谢谢了 O(∩_∩)O~