簡體   English   中英

C ++指向2D動態數組的指針?

[英]C++ Pointer to 2D Dynamic 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分配內存並為其分配?

謝謝!

指向x的指針為:

int *** y = &x;

無需為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

還要查看答案以獲取更多信息。

現在,您已經創建了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 <std :: vector>)!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM