javaer学c++: 计算数组长度_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > javaer学c++: 计算数组长度

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

 2013/11/3 1:16:21  yuanzhifei89  程序员俱乐部  我要评论(0)
  • 摘要:c++中又一个比较啃爹的就是数组了,数组不像java那样,带一个length属性存放数组的长度,而是需要硬编码或者自己来计算.intarray[]={1,2,3,4,5};intlength=sizeof(array)/sizeof(int);但是只有这种硬编码的数组才能计算长度,对于动态创建的数组就无法用这种方式来算出其长度了.同时,还要注意一个陷阱:intgetArrayLength(intarray[]){intlength=sizeof(array)/sizeof(int)
  • 标签:c++ 数组 Java

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

class="c++" name="code">
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所占的空间.


发表评论
用户名: 匿名