读书人

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

发布时间: 2013-04-02 12:35:26 作者: rapoo

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

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

具体看下面代码:

int GetLength(char arr[]);int main(){    int len;    char temp[] ={1,2,3};    len = GetLength(temp);    cout<<len<<endl;}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,所以,出现以上的问题的就不足为奇了。

解决方法:

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


读书人网 >编程

热点推荐