一个学弟有个小问题让帮忙解决:
void main()
{
float average(int a[]);
int a[10] , i;
float aver;
for(i = 0 ; i<10 ; i++)
scanf("%d" , &a[i]);
aver = ________________;
printf("average is %6.2f" , aver);
}
float average(int a[])
{
int sum = 0,i;
float aver;
for( i=0 ; i<10 ; i++)
______________________;
aver = sum/10;
______________________;
}
当时我不假思索地回答了:
average(a);
sum += a[i];
return aver;
可第二天再去浏览时候,发现不对,在答案的average(a) ,a是个指针,然后形参a[] 是个值,怎么会是对的呢,抱着这个态度,我去检验了一下,结果发现我给的答案是...正确的....
或许是我第二天迷糊了,可我真的就觉得不对了,除非...a[]并不代表值,联想到写C++的时候一般声明数组形参时候都习惯用*来声明,改用数组试试!
得出结果:数组大小限定的数值可以说是无效的,当然这样就有可能会造成数组越界导致程序崩溃,于是这里C/C++就做出了一个变化,弱化数组能力,强化指针能力,此时的数组a[]其实就相当于*a,那么这其中的a也就相等啦,所以我们就可以认为average(int a[])等价于average(int *a),于是这里就应该传a啦。