2017-02-24 65 views
0

编辑2:我试图近似我的实际代码在这里,但显然我错过了一些东西,因为这段代码没有生成我在实际代码中得到的警告。我正在结束这件事,直到我能够找出差异。指向一个二维数组中的数组C

原始的问题

什么为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

'arr [n]'有什么问题? –

+1

@SouravGhosh,指向'arr [n]'的变量的类型是什么? –

+0

你的意思是指什么?它与'arr [m]'相同,以防数组被定义为'arr [n] [m]' –

回答

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]相同。

+0

这个警告只有意义请参阅我修改后的问题。 –

0

你可以用这个int * ptr_to_row=arr[row_no];

+0

我编辑了关于这个问题。 –

+0

尝试不用const –

+0

删除const会添加一个新的警告,'warning C4090:'=':不同的'const'限定符。另外我应该可以有一个指向常量数据的指针,即使数据不是常量,这也意味着我不能通过指针修改它。 –