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

本文探讨了C++中获取数组长度的方法,并揭示了一个常见陷阱:通过sizeof计算动态数组长度时,函数参数传递可能导致错误结果。文章详细解释了为何此类陷阱会出现及背后涉及的指针原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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


[b]同时, 还要注意一个陷阱:[/b]
[/size]

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

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

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

而上面的array, 编译时编译器是可以知道他是一个5元素的数组, 所以结束地址在编译时就可以知道是: 开始地址 + 5个int所占的空间.
[/size]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值