You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中使用begin与end获取数组大小的原理疑惑

用begin和end计算C++数组大小的原理

先给你拆解清楚这俩函数的作用,以及指针减法的核心逻辑:

  1. 数组的内存本质
    你定义的int nums[] = {10,20,30,40,20,50}是静态数组,它在内存里是连续存储的6个int元素。每个int占固定字节数(多数系统是4字节),所有元素的内存地址按顺序紧密排列。

  2. begin和end的实际指向

  • begin(nums)返回指向数组第一个元素的指针,等价于&nums[0],也就是第一个数值10的内存地址。
  • end(nums)返回指向最后一个元素之后的假想位置的指针——这个位置不存储任何有效数据,纯粹是用来标记数组结束的边界。
  1. 指针减法的关键规则
    C++里,同类型指针相减,结果是两个指针之间相差的元素个数,不是字节数。拿你的例子来说:
    假设begin(nums)的地址是0x100,每个int占4字节,那end(nums)的地址就是0x100 + 6*4 = 0x118。用0x118 - 0x100得到24字节,除以每个int的4字节,刚好算出6——这就是数组的元素总数。

  2. 为什么end要指向“假想位置”
    这个设计是为了统一遍历逻辑:比如写循环时可以用for (auto ptr = begin(nums); ptr != end(nums); ++ptr),循环会从第一个元素走到end的标记位置,刚好遍历完所有元素,既不会遗漏也不会越界。

内容的提问来源于stack exchange,提问作者mee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 17:14:52