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

时间:2014-09-10 18:42:24

标签: c++ arrays dynamic multidimensional-array

我是一个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分配内存并分配它?

谢谢!

2 个答案:

答案 0 :(得分:0)

指向x的指针是:

int *** y = &x;

无需为y分配空间。

答案 1 :(得分:0)

以下是使用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

再次查看this答案。

现在,您已经创建了2D数组。你只想指向它的指针。您不需要再次分配内存(这可能是错误的)!

所以,你只需要这样做:

  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&lt; std :: vector&gt;)!