sizeof对静态数组和new动态数组求长度的区别

sizeof可以用来求取数组的长度,但是只是针对静态数组而言,比如:

int arr[] = {1,2,3,4,5,6,7};
int result = sizeof(arr);

result的结果会是7*4=28,因为静态数组中有7个元素,每个元素的类型为int型,占4个字节。
因此可以使用下面的代码求静态数组的程度:

int result = sizeof(arr)/sizeof(arr[0]);

在C++中可以使用模板的方法来进行求取静态数组的长度:

#include <iostream>
using namespace std;
template <class T>
int getArrayLen(T& array)
{
    return (sizeof(array) / sizeof(array[0]));
}
int main()
{
    char a[] = {'1','2','3'};
    cout << getArrayLen(a) << endl;
    return 0;
}

但是当sizeof用于动态数组时,表现出不同的性能:

int * arr = new int[10](1,2,3,4,5,6,7);
int result = sizeof(arr);

result的结果会是4,也就是一个int类型指针所占的内存大小,4个字节。
其实对于sizeof而言,当作用于静态数组时,此时的arr数组名不在是代表指针(对于数组名arr而言,在大多数情况下代表数组首字母的指针,如当做实参传递给函数时),就是代表的整个数组。对于new分配的数组的大小,只能我们自己记得,没有好的办法进行求取。

在C++中,数组长度(或称为数组的大小)是在编译时就确定的一个常量,表示数组中可以存储的元素数量。要数组的整个长度,你可以使用以下几种方法: 1. 静态数组数组大小在编译时确定):直接使用数组定义时指定的大小。 ```cpp int myArray[10]; // 定义了一个包含10个整数的数组 const int length = sizeof(myArray) / sizeof(myArray[0]); // 计算数组长度 ``` 在这里,`sizeof(myArray)` 会返回整个数组占用的内存大小(以字节为单位),`sizeof(myArray[0])` 返回数组中单个元素的大小。将两者相除即可得到数组的元素数量。 2. 动态数组(在运行时分配):如果你使用动态数组,比如 `new[]` 或者标准库中的容器如 `std::vector`,那么数组长度是可以通过其提供的方法直接获得的。 ```cpp int* dynamicArray = new int[10]; // 动态分配了一个包含10个整数的数组 const int length = 10; // 动态数组长度需要程序员自己维护 delete[] dynamicArray; // 使用完毕后记得释放内存 ``` 对于动态数组,你需要手动管理数组长度,因为 `sizeof` 无法在运行时获取动态分配数组的大小。 3. 标准库容器:使用如 `std::vector` 或 `std::array` 这样的标准库容器时,可以直接调用容器提供的方法来获取长度。 ```cpp std::vector<int> vec = {1, 2, 3, 4, 5}; const int length = vec.size(); // 直接调用size方法获取长度 ``` 需要注意的是,使用 `sizeof` 来获取数组长度仅适用于静态数组,并且在函数参数中使用数组时,数组会退化为指向其首元素的指针,此时使用 `sizeof` 将不能正确得到数组长度
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值