通过指针访问多维数组

时间:2014-02-19 10:04:09

标签: c arrays pointers multidimensional-array

我知道,有很多人被告知,但我找不到我需要的明确参考。

我需要一个指向二维数组的结构成员。数组大小不固定,结构的每个实例都将指向具有不同大小的数组。

我想到了以下方式:

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]

我的问题:这总能奏效。

1 个答案:

答案 0 :(得分:4)

此作业不起作用:

towDim1.ptr2TwoDim = arr1;

arr1衰退到int (*)[90],而不是int *。您必须使用指向第一个元素的指针执行此分配,如:

towDim1.ptr2TwoDim = &arr1[0][0];

或者,相当于

towDim1.ptr2TwoDim = arr1[0];

同样适用于towDim2.ptr2TwoDim = arr2;

除此之外,只要您确保curr_rowcurr_col不会超出范围,那么是的,它将始终有效。