【问题标题】:How is memory allocated in this line of code "int **v = new int*[n]; "?这行代码“int **v = new int*[n];”中的内存是如何分配的?
【发布时间】:2023-04-08 04:05:02
【问题描述】:
 int **v = new int*[n];

我很困惑这是做什么的?有人可以解释一下吗?

【问题讨论】:

标签: c++ arrays pointers memory-management syntax


【解决方案1】:

它没有正确完成:

int **v = new int*[n];

我们认为这意味着在内存上动态分配整数数组的数组,因此维度必须适合它

静态等价

const size_t n=5;
int *v[n] = {} ;

// 或 int v[][n] ={ {1,2,3,4,5}, {6,7,8}, {9,8,7,6,5} }; //二维数组

因为第一维的最大尺寸被自动推断为 3 但是
我想恕我直言,这还没有给出,

int **v = new int*[n];

所以它会被指定为

int **v = new int*[n * 3];

【讨论】:

  • 你的意思是int v[][n] =
【解决方案2】:

这会将n 指针数组分配给int。指向该指针数组中第一个元素的指针存储在v 中。它是一个双指针,因此通过v[i] 访问一个元素会从数组中返回一个存储的指针。

【讨论】:

  • 您可能还想提到数组中的n 指针是未初始化的。这意味着即使访问它们的值也会产生未定义的行为。要使用它们(例如,甚至将指针与其他指针进行比较,更不用说取消引用指针,就好像它们指向数组的第一个元素一样),需要适当地初始化它们。
  • for (size_t i = 0; i
  • 对于i,最好使用size_t 而不是int
猜你喜欢
  • 2010-11-08
  • 2013-10-03
  • 2021-11-22
  • 2021-07-30
  • 1970-01-01
  • 2021-08-26
相关资源
最近更新 更多