C++中计算数组长度常用sizeof运算符和std::size函数。1. 使用sizeof时,通过sizeof(arr)/sizeof(arr[0])计算元素个数,仅在数组未退化为指针时有效,如作为函数参数则失效。2. C++17引入的std::size语法简洁、安全,支持原生数组和STL容器,编译时求值,但需较新标准支持。3. 动态分配数组和传参后的数组不可用sizeof正确获取长度,应优先使用std::size或手动记录长度。

在C++中,计算数组长度有多种方法,常用的包括sizeof运算符和std::size函数。它们各有适用场景,理解其原理有助于写出更安全、清晰的代码。
使用 sizeof 计算数组长度
sizeof是C++内置的编译时运算符,用于获取数据类型或变量所占的字节数。对数组使用sizeof时,可以结合元素大小来计算元素个数。
基本公式为:
数组长度 = sizeof(数组) / sizeof(数组第一个元素)
立即学习“C++免费学习笔记(深入)”;
示例:
int arr[] = {1, 2, 3, 4, 5};
int length = sizeof(arr) / sizeof(arr[0]);
// sizeof(arr) 返回 20(假设int为4字节)
// sizeof(arr[0]) 返回 4
// length = 20 / 4 = 5
注意:这种方法只在数组未退化为指针时有效。一旦数组作为参数传入函数,它会退化为指针,此时sizeof(arr)返回的是指针大小(如8字节),而非整个数组大小,结果将错误。
使用 std::size 获取数组长度
C++17起引入了std::size函数,定义在头文件中,用于安全地获取数组或标准容器的元素数量。
#includeint arr[] = {10, 20, 30}; auto length = std::size(arr); // 返回 3
优点:
- 语法简洁,语义明确
- 支持原生数组和STL容器(如vector、array)
- 在编译时求值,无运行时开销
- 避免手动计算出错
限制:需要C++17及以上标准支持。若项目使用较老版本编译器,可能无法使用。
常见误区与注意事项
以下情况容易导致数组长度计算错误:
-
数组传参后使用sizeof:函数形参中的数组实际是指针,
sizeof不再有效 -
动态分配的数组:
new[]或malloc创建的数组无法用sizeof获取长度,需自行记录 -
字符数组与字符串:含空字符的字符串长度比
sizeof计算值小1,注意区分字符数与有效内容长度
推荐做法:优先使用std::size;若不支持C++17,可在作用域内用sizeof(arr)/sizeof(arr[0]),并避免在函数参数中使用原生数组。
基本上就这些。掌握这两种方法的区别和适用范围,能帮助你在不同场景下正确获取数组长度。









