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

在C++中,静态数组的大小在编译时就已经确定,虽然不能直接通过数组名获取元素个数,但可以通过一些方法在编译期或运行期“动态”地获取其大小。
最常用的方法是利用 sizeof 计算数组总字节数除以单个元素的字节数:
int arr[] = {1, 2, 3, 4, 5};
int count = sizeof(arr) / sizeof(arr[0]); // 结果为 5
这种方法在编译时就能计算出结果,效率高,适用于所有静态数组。但注意:一旦数组退化为指针(如传参到函数),sizeof 就只能得到指针大小,不再有效。
C++17 引入了 std::size,可以更简洁安全地获取数组大小:
立即学习“C++免费学习笔记(深入)”;
#include <iterator>
int arr[] = {1, 2, 3, 4, 5};
auto count = std::size(arr); // 返回 5
它对数组、标准容器都适用,代码更通用,推荐在支持的环境下使用。
当需要将数组大小传递到函数中时,可以通过模板防止数组退化:
template <size_t N>
void func(int (&arr)[N]) {
int count = N; // 直接获得元素个数
}
这样即使在函数内部,也能准确获取数组长度,避免指针退化带来的信息丢失。
基本上就这些。关键是理解数组在何时会退化为指针,并选择合适的方法在正确的地方使用。sizeof 和 std::size 是最实用的手段。
以上就是如何动态获取C++中一个静态数组的元素个数的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号