javaer学c++: 计算数组长度

阅读更多

c++中又一个比较啃爹的就是数组了, 数组不像java那样, 带一个length属性存放数组的长度,
而是需要硬编码或者自己来计算.

int array[] = {1, 2, 3, 4, 5};
int length = sizeof(array) / sizeof(int);


但是只有这种硬编码的数组才能计算长度, 对于动态创建的数组就无法用这种方式来算出其长度了.


同时, 还要注意一个陷阱:

int getArrayLength(int array[])
{
    int length = sizeof(array) / sizeof(int);
    return length;
}


注意, 该函数将总是返回1. 这个就是指针方面的问题了, 对于指针变量, 他会记录这些东西:
(1) 指针类型(用于指针的++, --这种运算)
(2) 所指内容的开始地址
(3) 所指内容的结束地址

而这边就是getArrayLength形参array的结束地址的问题, 因为在编译时, 编译器无法知道传给array的到底会是保存5个元素的数组还是保存6个元素的数组还是其它大小的数组, 所以编译器就将其作为普通的int *指针处理, 结束地址就是: 开始地址 + int变量所占的空间.

而上面的array, 编译时编译器是可以知道他是一个5元素的数组, 所以结束地址在编译时就可以知道是: 开始地址 + 5个int所占的空间.


你可能感兴趣的:(数组长度,c++)