指向C中的2D数组中的数组

时间:2017-02-24 16:45:13

标签: c arrays multidimensional-array

EDIT2:我试图在这里估算我的实际代码,但显然我错过了一些东西,因为这段代码并没有产生我在实际代码中得到的警告。我一直关闭这个,直到我能弄清楚这种差异。

原始问题

指向2D数组中的数组(行)的语法是什么,如下所示?那么如何使用行指针访问其中的各个元素?

int arr[3][4] =
{
    {0, 1, 2, 3},
    {4, 5, 6, 7},
    {8, 9, 10, 11},
};

编辑:

如果我这样做

int const * pRow = arr[1];

我收到编译器警告

warning C4047: '=': 'const int *' differs in levels of indirection from 'const int (*)[4]'

是否有"权利"这样做的方法,除了用强制转换强迫它?

2 个答案:

答案 0 :(得分:2)

arr[m]int的数组,并且作为所有数组,它自然地衰减到指向其第一个元素的指针。现在arr[m]的第一个元素的类型是什么(即arr[m][0])?这是int对吧?因此arr[m]衰减到指向int的指针,即int*

这意味着您可以执行类似

的操作
int *ptr_to_arr_1 = arr[1];

您可以将ptr_to_arr_1用作任何其他数组或指针。因此要访问第二个元素ptr_to_arr_1[1],它与arr[1][1]相同。

答案 1 :(得分:0)

您可以使用此int * ptr_to_row=arr[row_no];