vin*_*e88 22 c++ pointers multidimensional-array
我试过看,但我找不到任何明确的答案.我知道我的问题不会那么难.也许只是因为我累了..
基本上,我想声明一个指向二维数组的指针.我想这样做,因为最终我将不得不调整数组的大小.我用1D数组成功完成了以下操作:
int* array;
array = new int[somelength];
Run Code Online (Sandbox Code Playgroud)
我想用2D数组执行以下操作但不会编译:
int* array;
array = new int[someheight][somewidth];
Run Code Online (Sandbox Code Playgroud)
编译器给出了一个错误,指出'somewidth'不能出现在常量表达式中.我已经尝试了**和[] []的各种组合,但它们似乎都没有用.我知道这并不复杂......任何帮助都表示赞赏.
Ton*_*ion 44
const int someheight = 3;
const int somewidth = 5;
int (*array)[somewidth] = new int[someheight][somewidth];
Run Code Online (Sandbox Code Playgroud)
dut*_*utt 13
我刚刚发现这个古老的答案仍然被阅读,这是一个耻辱,因为它是错的.请看下面的答案,而不是所有选票.
阅读指针语法,您需要一个数组数组.这与指针指针是一回事.
int width = 5;
int height = 5;
int** arr = new int*[width];
for(int i = 0; i < width; ++i)
arr[i] = new int[height];
Run Code Online (Sandbox Code Playgroud)
使用短语"二维动态数组"进行谷歌搜索几秒后,这里是一个现成的示例:
int **dynamicArray = 0;
// memory allocated for elements of rows.
dynamicArray = new int *[ROWS];
// memory allocated for elements of each column.
for( int i = 0 ; i < ROWS ; i++ ) {
dynamicArray[i] = new int[COLUMNS];
}
// free the allocated memory
for( int i = 0 ; i < ROWS ; i++ ) {
delete [] dynamicArray[i];
}
delete [] dynamicArray;
Run Code Online (Sandbox Code Playgroud)
我建议使用比数组数组简单得多的方法:
#define WIDTH 3
#define HEIGHT 4
int* array = new int[WIDTH*HEIGHT];
int x=1, y=2, cell;
cell = array[x+WIDTH*y];
Run Code Online (Sandbox Code Playgroud)
我认为这是比数组数组更好的方法,因为分配要少得多。您甚至可以编写一个辅助宏:
#define INDEX(x,y) ((x)+(WIDTH*(y)))
int cell = array[INDEX(2,3)];
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
71207 次 |
最近记录: |