C++ 数组长度

本文探讨了初学者在C++中使用数组时常见的错误,特别是如何正确地使用sizeof操作符来获取数组元素的数量,并给出了正确的数组遍历方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

初学c++,到数组的时候想手动写一下循环输出数组内容的简单循环,int arrayint[]=(1,2,3,4,5);

    for (size_t i = 0; i <sizeof(arrayint); i++)
    {
        cout << arrayint[i] << endl;
        cout << "i="<<i << endl;

    }

结果发现输出内容不对,i的值远远比size大,于是查资料了解一下sizeof是什么作用:

sizeof是一个操作符(operator)。

其作用是返回一个对象或类型所占的内存字节数。

就是说它是用来描述一个对象占多少内存字节数的,

所以它的数组大小看网上资料应该是sizeof(arrayint)/sizeof(arrayint[0]);

之所以这么做是因为C++里给数组每个数据分配的内存大小是一样的

另外一种方法是使用vector,不做赘述。

 

### C++ 中获取数组长度的方法 在 C++ 编程中,可以通过多种方法来获取数组长度。以下是几种常见的实现方式: #### 使用模板函数计算数组长度 通过编写一个通用的模板函数 `length` 来动态计算数组长度。这种方法适用于编译期已知大小的数组。 ```cpp #include <iostream> using namespace std; template<class T> int length(T& arr) { return sizeof(arr) / sizeof(arr[0]); } int main() { int arr[] = {1, 5, 9, 10, 9, 2}; cout << "数组长度为:" << length(arr) << endl; } ``` 此代码片段展示了如何利用模板函数和 `sizeof` 运算符来计算数组长度[^1]。 --- #### 宏定义法 另一种常见的方式是使用宏定义来简化数组长度的计算过程。这种方式简单直观,适合频繁使用的场景。 ```cpp #define GET_ARRAY_LEN(arr, len) {len = (sizeof(arr) / sizeof(arr[0]));} int main() { int a[] = {1, 2, 3, 4}; int len; GET_ARRAY_LEN(a, len); cout << "长度为:" << len << endl; } ``` 这段代码展示了一个简单的宏定义方法,用于快速获取数组长度[^2]。 --- #### 利用标准库中的 `std::end` 和 `std::begin` C++ 提供了标准库函数 `std::begin` 和 `std::end`,它们分别返回数组的第一个元素地址和最后一个元素之后的位置。两者相减即可得到数组长度。 ```cpp #include <iostream> using namespace std; int main() { int arr[] = {1, 5, 9, 10, 9, 2}; cout << "数组长度为:" << (end(arr) - begin(arr)) << endl; } ``` 这种基于迭代器的操作更加现代化且易于理解。 --- #### 定义宏常量 为了提高可读性和重复利用率,还可以定义一个宏常量来表示数组长度的计算逻辑。 ```cpp #define Array_size(array) sizeof(array)/sizeof(array[0]) int main() { int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9}; cout << "数组arr长度:" << Array_size(arr) << endl; } ``` 该方法简洁明了,特别适合于需要多次调用数组长度的情况[^3]。 --- #### 特殊情况:字符数组 对于字符串类型的字符数组,在某些情况下可能需要额外处理 `\0` 终止符的影响。 ```cpp template <class T> int getArrayLen(T &array) { const int len = sizeof(array) / sizeof(array[0]); char a[len]; if (typeid(array) == typeid(a)) return len - 1; // 去除 '\0' else return len; } ``` 这里提供了一种针对字符数组的特殊处理方案,确保不会因终止符而错误计数[^4]。 --- #### 注意事项 需要注意的是,当数组作为参数传递给函数时,其退化为指针类型,此时无法再通过 `sizeof` 计算原始数组长度。因此,如果要在函数内部操作数组长度,需显式传递长度值或采用其他替代策略[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值