对于静态数组可用sizeof计算长度,动态数组或容器应使用size()函数;通过模板函数可安全封装sizeof方法;推荐优先使用std::array或std::vector以避免指针退化问题并提升安全性。

在C++中获取数组长度(即元素个数)的方法取决于数组的类型和使用场景。对于普通静态数组,可以通过 sizeof 运算符 来计算;而对于动态分配的数组或标准容器,则需要使用其他方式。
使用 sizeof 计算静态数组长度
对于在栈上定义的固定大小数组,可以利用 sizeof 操作符求出总字节数,再除以单个元素的字节数,从而得到元素个数。
- 这种方法只适用于编译时已知大小的数组
- 不能用于指针或动态分配的内存
示例代码:
#include iostream>
using namespace std;
int main() {
int arr[] = {1, 2, 3, 4, 5};
int length = sizeof(arr) / sizeof(arr[0]);
cout
return 0;
}
输出结果为:5,正确反映了数组元素个数。
立即学习“C++免费学习笔记(深入)”;
模板函数封装数组长度计算
为了提高代码安全性与可读性,可以将 sizeof 方法封装成模板函数,避免在参数传递后退化为指针导致错误。
示例:
template
constexpr size_t array_length(T (&)[N]) {
return N;
}
int main() {
int data[] = {10, 20, 30};
cout
return 0;
}
这个方法在编译期就能确定结果,效率高且类型安全。
使用 std::array 或 std::vector
现代 C++ 推荐使用标准库容器代替原生数组。它们自带 size() 成员函数,更安全、易用。
例如:
#include
#include
std::array
cout
std::vector
cout
这些容器不仅能自动管理大小,还支持范围遍历、越界检查等特性。
注意:指针无法直接获取数组长度
当数组作为参数传递给函数时,会退化为指针,此时 sizeof 将不再有效。
错误示例:
void func(int* arr) {
cout
}
解决方案:应额外传入长度参数,或使用引用传递数组,或改用 std::span (C++20)。
基本上就这些常见方法。关键是要分清数组是否为原生静态数组,是否涉及函数传参,合理选择计算方式。优先推荐使用标准库容器以减少错误。











