关于函数形参的数组真实面目

一个学弟有个小问题让帮忙解决:

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啦。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值