c++ - 我应该怎么做才能获得 'dynamic' 数组的大小?

标签 c++ arrays pointers sizeof

<分区>

我有这个代码。

   int x[5];
   printf("%d\n",sizeof(x) );


   int *a;
   a = new int[3];
   printf("%d\n",sizeof(*a));

当我将“静态”数组传递给 sizeof() 时,它返回声明数组的维数乘以该数据类型在内存中使用的字节数。但是,动态数组似乎有所不同。我的问题是我应该怎么做才能获得“动态”数组的大小?

PD:会不会跟下面的有关?

int *a;
a=new int[3];
a[0]=3;
a[1]=4;
a[2]=5;
a[3]=6;

如果我应该在“a=new int[3]”中放置一个“限制”,为什么我可以修改第三个位置。

最佳答案

When I pass a 'static' array to sizeof(), it returns the dimension of the declared array multiplied by the number of bytes that the datatype uses in memory.

正确,这就是整个数组大小的计算方式。

However, a dynamic array seems to be different.

这是因为您没有传递动态数组;你正在传递一个指针。指针是一种数据类型,其大小与它可能指向的内存块的大小无关,因此你总是得到一个常量值。当您为动态大小的内存块分配内存时,您需要存储分配的大小以供将来引用:

size_t count = 123; // <<== You can compute this count dynamically
int *array = new int[count];
cout << "Array size: " << (sizeof(*array) * count) << endl;

C++14 将拥有变长数组。当您检查 sizeof 时,这些数组将提供合适的大小。

Could it be related to the following? [...]

不,这是无关的。您的代码片段显示未定义的行为(写入已分配内存块的末尾),这意味着您的代码无效。它可能会立即崩溃、稍后导致崩溃或表现出其他任意行为。

关于c++ - 我应该怎么做才能获得 'dynamic' 数组的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25756090/

相关文章:

c++ - 通过结构将参数传递给 CreateThread() 并更改后续线程的成员而不影响先前的线程?

c++ - 如何在wxWidgets框架中添加图片?

c++ - 为什么指向字符串数组的指针会颠倒索引顺序?

c++ - 指针引用的默认值

c++ - 在 C++ 中使用内存位置字符串

pointers - 类型将接口(interface)指针转换为接口(interface)指针

c++ - 类类型参数的传值、重载或完美转发

c++ - 为什么模板只能在头文件中实现?

javascript - 如何循环遍历具有多个对象的数组并仅在 Javascript 中列出某些元素?

javascript - 使用 lodash find 推送到数组时按值对对象进行排序