思路:
1:用int *p指向a[0][0]的地址,因为二维数组是顺序存放元素的,所以p++就
代表下一个元素的地址,用它来求和即可
2:因为要求某个学生的成绩,这里用p指向具有4个元素的一维数组的指针比
较好理解,输出某个学生的全部成绩,
3:扩展一下,如果让输出某一个课程所有学生的全部成绩,就可以用for循环改变指向行的元素即可,比如(*(p+n)+i) 这时候改变n的值,i的值不变就可
以了。
//二维数组的元素的顺序存放的
#include <stdio.h>
int main(void)
{
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);//a[0][0]的地址做实参,顺序存放
search(score,2);//score[0]做实参,指向每一行,
return 0;
}
void average(float *p,int n)
{
float sum=0,aver;
p_end=p+n-1;//代表最后一个元素 p+n代表第12个元素
for(;p<=p+n-1;p++)
{
sum=sum+(*p);
}
aver=sum/n;
printf("average=%5.2f\n",aver);
}
void search(float (*p)[4],int n)
{
int i;
printf("第%d个学生的成绩是:\n",n);
for(i=0;i<4;i++)
{
printf("%f\t",(*(p+n)+i));
}
printf("\n");
}