【问题标题】:C++ Pointer to 2D Dynamic Array?指向二维动态数组的 C++ 指针?
【发布时间】:2014-09-10 18:42:23
【问题描述】:

我是一个 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++新手”,帮自己一个忙,忘记你曾经听说过new,尤其是new的数组形式。对于参差不齐的二维数组,请使用std::vector<std::vector<int>>
  • 该项目是一个类,设计规范表明我们不使用向量。
  • 然后解雇你的老师,找一个知道他在做什么的人。抱歉这么直率,但这是他完全不可原谅的行为。

标签: c++ arrays dynamic multidimensional-array


【解决方案1】:

这是一个在 C++ 中创建二维数组的示例。

#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 答案以获取更多信息。

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

所以,你只需要这样做:

  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)!

【讨论】:

    【解决方案2】:

    指向 x 的指针是:

    int *** y = &x;
    

    不需要为y分配空间。

    【讨论】:

    • 这不是让 y 指向 x 吗?我希望 y 指向一个指向 x 指向的指针
    猜你喜欢
    • 1970-01-01
    • 2017-06-11
    • 2021-08-23
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 2013-04-06
    相关资源
    最近更新 更多