我知道,有很多人被告知,但我找不到我需要的明确参考。
我需要一个指向二维数组的结构成员。数组大小不固定,结构的每个实例都将指向具有不同大小的数组。
我想到了以下方式:
struct towDimByPtr
{
int NumRow;
int NumCol;
int* ptr2TwoDim;
};
然后我会有全局变量:
int arr1[30][90];
int arr2[20][10];
towDimByPtr towDim1;
towDimByPtr towDim2;
在初始阶段,我会这样做:
towDim1.ptr2TwoDim = arr1;
towDim1.NumRow = 30;
towDim1.NumCol = 90;
towDim2.ptr2TwoDim = arr2;
towDim2.NumRow = 20;
towDim2.NumCol = 10;
最后,在访问我将使用的元素时:
towDim1[curr_row*NumCol + curr_col]
我的问题:这总能奏效。
答案 0 :(得分:4)
此作业不起作用:
towDim1.ptr2TwoDim = arr1;
arr1
衰退到int (*)[90]
,而不是int *
。您必须使用指向第一个元素的指针执行此分配,如:
towDim1.ptr2TwoDim = &arr1[0][0];
或者,相当于
towDim1.ptr2TwoDim = arr1[0];
同样适用于towDim2.ptr2TwoDim = arr2;
。
除此之外,只要您确保curr_row
和curr_col
不会超出范围,那么是的,它将始终有效。