我有一个动态分配的1D数组,我想指向它一个双指针(**ptr),然后将ptr视为一个2D数组,但是对于这个问题,应该设置2D数组的宽度,有没有办法这样做。例如,如果我有一个尺寸为80的数组,我想把它当作一个8*10的二维数组,这样((ptr)+1)将移动10个单位。我知道我可以手动使用它作为arr[irow+j],但我更愿意用另一种方法。谢谢你的帮助!!!
最佳答案
要使用指针将一维数组重新解释为二维数组,请执行以下操作:
Type a[80];
Type (*b)[10] = (Type (*)[10])a;//or simply (void*)a. b is pointer to Type[10]
使用
b[i][j]
注:
双指针(如as
**ptr
)基本上是错误的。通常,数组不是指针数组。
从C99(c11的选项)开始,
int col = 10; Type (*b)[col] = (Type (*)[col])a;
也可以作为VLA(可变长度数组)。