/*****
关于数组指针的理解:
void average(float *point, int n);
void search(float (*point)[4], int n);
上面是函数申明。
average(*score, 16);
search(score, num);
这里是函数调用。
同是 指针,为什么两个实参不一样。
这里是二维数组指针,分为3级.
对于该数组我们可以理解为:score的一维数组(第一层),它有四个元素score[0]、score[1]、score[2]、score[3](第二层),
而每个元素又含有4个元素score[0][0],score[0][1],score[0][2],score[0][3](第三层)…
到此我们终于访问到了每个元素了,这个过程我们经历了:score->score[0]->score[0][0];
这里void average(float *point, int n);*point定位于第三层了。
我们实参传递时,就要是他上一层,也就是第二层*score.
这里void search(float (*point)[4], int n); (*point)[4]定位于第二层。
我们实参传递时,就要是他上一层,也就是第一层score.
*******/
#include <stdio.h>
#include <stdlib.h>
void average(float *point, int n);
void search(float (*point)[4], int n);
int main(int argc, char *argv[])
{
int num;
static float score[4][4] = {{76, 90, 92, 87},{68, 78, 69, 94},{89, 82, 81, 60},{81, 68, 60, 97}};
printf("班级的总平均分:");
average(*score, 16);
printf("请输入学生的学号(0-3):");
scanf("%d", &num);
search(score, num);
system("pause");
return 0;
}
void average(float *point, int n)
{
float *p_end;
float aver;
float sum = 0;
p_end = point + n - 1;
for(; point <= p_end; point++)
sum = sum+(*point);
aver = sum/n;
printf("%5.2f\n",aver);
}
void search(float (*point)[4], int n)
{
int i;
for(i = 0; i < 4; i++)
printf("%5.2f,",*(*(point+n)+i));
printf("\n");
}
|