C中数组问题--数组作参数与数组长度

     今天 在做项目时,遇到一个问题:定义一个长度为3的char 数组,把它作为参数,传递给函数,再计算长度,却得不到预期结果。

具体看下面代码:

 

int GetLength(char arr[]);
int main()
{
    int len;
    char temp[] ={1,2,3};
    len = GetLength(temp);
    cout<<len<<endl;
    return 0;
 }
int GetLength(char arr[])
{
     return sizeof(arr) / sizeof(arr[0]);
}

打印结果为:4

 

预期结果为:3

所以,就郁闷了,本来定义长度为3,怎么跑出4来呢?

debug 时,在watch中,故意写temp[3],下标越界,以为会报错,没有想到不但没有报错,居然还跑203的值来,郁闷!

查了资料:

   1.编译器并不对数组下标越界做检测,

   2.参数传递方式。

这里的数组是使用地址传递,所以到函数GetLength那里,就只是一个地址而已了,在win32系统里地址长度为32bit,

故用sizeof(arr)得出来的结果为4,所以,出现以上的问题的就不足为奇了。

解决方法:

      如果要使用数组作参数,又要操作数组长度,一般把长度也作为一个参数传递给函数。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值