二维数组作为函数参数,实参可以直接使用二维数组名,在被调用函数中对形参数组定义可以指定所有维数的大小,也可以省略第一维的大小说明,如:
它们是合法且等价,也可以使用如下形式:
但不能省略第二维的大小,如下面的定义是不合法的,编译时会出错:
因为从实参传递来的是数组的起始地址,如果在形参中不说明列数,编译器将无法定位元素的的位置。
#include<stdio.h>
int
main()
{
void
average(float
*p,float
*p1,int
n)
float
score[3][4]={{65,67,70,80},{80,87,90,81},{90,99,100,98}}
average(score[0],&score[2][3],12)
return
0
}
void
average(float
*p,float
*p1,int
n)
{
float
sum=0
for(p<=p1p++)
{
sum+=(*p)
}
printf("\t%5.2f",(sum/n))
}
在你给出的程序有两处错误
1,average(*score,12)
这句中你的本意是传输score【0】【0】的地址
但是*score是不行得
2,for(p<=(p+n-1)p++)这句中
p是指向score【】【】的指针
p++是p向后移时候
(p+n-1)已不再指向score【2】【3】这个数组的末位置