[英]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.