指向2D动态数组的C++指针

C++ Pointer to 2D Dynamic Array?

本文关键字:C++ 指针 数组 2D 动态 指向      更新时间:2023-10-16

我是一个C++新手,我正在做一个项目,我有点卡住了。我需要创建一个动态的2D粗糙数组,然后有一个指针指向它

int ** x = new int*[3];
int *** y = ???;

现在,在我做之后:

x[n] = new int[length];
x[++n] = new int[length2];
//etc etc

我可以通过以下语句访问数组中的值:

int num = x[i][j];

我想要的是能够通过y来获得相同的数组值,比如:

int num2 = *y[i][j];

那么,在这种情况下,num2和num应该有相同的值,我该如何为y分配内存并分配它呢?

谢谢!

下面是一个用C++创建2D数组的例子。

#include <iostream>
int main() {
  // dimensions
  int N = 3;
  int M = 3;
  // dynamic allocation
  int** ary = new int*[N];
  for(int i = 0; i < N; ++i)
      ary[i] = new int[M];
  // fill
  for(int i = 0; i < N; ++i)
    for(int j = 0; j < M; ++j)
      ary[i][j] = i;
  // print
  for(int i = 0; i < N; ++i)
    for(int j = 0; j < M; ++j)
      std::cout << ary[i][j] << "n";
  // free
  for(int i = 0; i < N; ++i)
    delete(ary[i]);
  delete [] ary;
  return 0;
}
// OUTPUT
0
0
0
1
1
1
2
2
2

查看此答案以了解更多信息。

现在,您已经创建了二维阵列。你只需要一个指针来指向它。你不需要再次分配内存(这是错误的)!

所以,你只需要做这样的事情:

  int ***p = &ary;
  // print
  for(int i = 0; i < N; ++i)
    for(int j = 0; j < M; ++j)
      std::cout << (*p)[i][j] << "n";

但是等等,它是C++!您应该使用std::array或std::vector而不是基元数组(将它们扩展为2D,如std::vector<std::向量>)!

指向x的指针为:

int *** y = &x;

无需为y.分配空间