C++静态数组元素个数获取方法
使用sizeof(arr)/sizeof(arr[0])可在编译期获取静态数组元素个数;2.C++17起推荐使用std::size(arr)更简洁安全;3.数组传参时会退化为指针,应使用模板形参size_tN或引用传数组以保留大小信息。
使用 sizeof(arr)/sizeof(arr[0]) 可在编译期获取静态数组元素个数;2. C++17 起推荐使用 std::size(arr) 更简洁安全;3. 数组传参时会退化为指针,应使用模板形参 size_t N 或引用传数组以保留大小信息。

在C++中,静态数组的大小在编译时就已经确定,虽然不能直接通过数组名获取元素个数,但可以通过一些方法在编译期或运行期“动态”地获取其大小。
使用 sizeof 运算符
最常用的方法是利用 sizeof 计算数组总字节数除以单个元素的字节数:
int arr[] = {1, 2, 3, 4, 5};
int count = sizeof(arr) / sizeof(arr[0]); // 结果为 5
这种方法在编译时就能计算出结果,效率高,适用于所有静态数组。但注意:一旦数组退化为指针(如传参到函数),sizeof 就只能得到指针大小,不再有效。
使用 std::size (C++17 及以上)
C++17 引入了 std::size,可以更简洁安全地获取数组大小:
#includeint arr[] = {1, 2, 3, 4, 5}; auto count = std::size(arr); // 返回 5
它对数组、标准容器都适用,代码更通用,推荐在支持的环境下使用。
封装为模板函数避免退化问题
当需要将数组大小传递到函数中时,可以通过模板防止数组退化:
templatevoid func(int (&arr)[N]) { int count = N; // 直接获得元素个数 }
这样即使在函数内部,也能准确获取数组长度,避免指针退化带来的信息丢失。
基本上就这些。关键是理解数组在何时会退化为指针,并选择合适的方法在正确的地方使用。sizeof 和 std::size 是最实用的手段。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。
Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。
Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。















