我是一个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分配内存并分配它?
谢谢!
答案 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;)!