C++中使用begin与end获取数组大小的原理疑惑
用begin和end计算C++数组大小的原理
先给你拆解清楚这俩函数的作用,以及指针减法的核心逻辑:
数组的内存本质
你定义的int nums[] = {10,20,30,40,20,50}是静态数组,它在内存里是连续存储的6个int元素。每个int占固定字节数(多数系统是4字节),所有元素的内存地址按顺序紧密排列。begin和end的实际指向
begin(nums)返回指向数组第一个元素的指针,等价于&nums[0],也就是第一个数值10的内存地址。end(nums)返回指向最后一个元素之后的假想位置的指针——这个位置不存储任何有效数据,纯粹是用来标记数组结束的边界。
指针减法的关键规则
C++里,同类型指针相减,结果是两个指针之间相差的元素个数,不是字节数。拿你的例子来说:
假设begin(nums)的地址是0x100,每个int占4字节,那end(nums)的地址就是0x100 + 6*4 = 0x118。用0x118 - 0x100得到24字节,除以每个int的4字节,刚好算出6——这就是数组的元素总数。为什么end要指向“假想位置”
这个设计是为了统一遍历逻辑:比如写循环时可以用for (auto ptr = begin(nums); ptr != end(nums); ++ptr),循环会从第一个元素走到end的标记位置,刚好遍历完所有元素,既不会遗漏也不会越界。
内容的提问来源于stack exchange,提问作者mee
相关产品推荐
相关产品推荐

