例10.14有一个班,3个学生,各学4门课,计算总平均分数,以及第n个学生的成绩。
这个题目本来是很简单的。只是为了说明用多维数组指针作函数参数而举的例子。用函数averaGe求总平均成绩,用函数search找出并输出第i个学生的成绩。程序如下:
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); /*求12个分数的平均分*/
search(score,2); /*求第2个学生成绩/

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

程序运行结果如下:
average=82.25
the score of No.2 are:
90.00 99.00 100.00 98.00
在函数main中,先调用averaGe函数以求总平均值。在函数average中形参p被声明为指向一个实型变量的指针变量。用p指向二维数组的各个元素,p每加1就改为指向下一个元素,见图10.31。相应的实参用*score,即score[0],它是一个地址,指向score[0][0] 元素。用形参n代表需要求平均值的元素的个数,实参12表示要求12个元素值的平均值。函数averaGe中的指针变量p指向score数组的某一元素(元素值为一门课的成绩)。sum是累计总分,aver是平均值。在函数中输出aver的值,故函数无需返回值。
函数search的形参p不是指向一般实型变量的指针变量,而是指向包含4个元素的一维数组的指针变量。实参传给形参n的值为2,即找序号为2的学生的成绩(3个学生的序号分别为0、1、2)。函数调用开始时,将实参score的值(代表该数组第0行首地址)传给p,使p也等于score。p+n是一维数组score[n]的首地址,*(p+n)+i是score[n][i]的地址,*(*(p+n)+i)是score[n][i]的值。现在n=2,i由0变到3,for循环输出score[2][0]到score[2][3]的值。