指向C中二维数组中的数组
EDIT2:我试图在这里近似我的实际代码,但显然我遗漏了一些东西,因为这段代码没有生成我在实际代码中得到的警告。在我能找出不符点之前,我会关闭这个 原始问题 指向二维数组(如下图所示)中的数组(行)的语法是什么?那么,如何使用行指针访问其中的各个元素呢指向C中二维数组中的数组,c,arrays,multidimensional-array,C,Arrays,Multidimensional Array,EDIT2:我试图在这里近似我的实际代码,但显然我遗漏了一些东西,因为这段代码没有生成我在实际代码中得到的警告。在我能找出不符点之前,我会关闭这个 原始问题 指向二维数组(如下图所示)中的数组(行)的语法是什么?那么,如何使用行指针访问其中的各个元素呢 int arr[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11}, }; 编辑: 如果我这样做 int const * pRow = arr[1]; 我收到编译器
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]'
除了强制使用强制转换外,还有“正确”的方法吗?
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\u to\u arr\u 1[1]
,它与arr[1][1]
相同arr[m]
是一个int
数组,与所有数组一样,它自然衰减为指向其第一个元素的指针。那么arr[m]
(即arr[m][0]
)的第一个元素的类型是什么?这是一个int
对吗?因此arr[m]
衰减为指向int
的指针,即int*
这意味着你可以做类似的事情
int *ptr_to_arr_1 = arr[1];
您可以使用
ptr_to_arr_1
作为任何其他数组或指针。因此,要访问第二个元素,您可以使用int*ptr\u to_arr\u 1[1]
,它与arr[1][1]
相同int*ptr\u to_row=arr[row\u no]代码>您可以使用此int*ptr\u to\u row=arr[row\u no]代码>arr[n]
有什么问题?@SouravGhosh,指向arr[n]
的变量的类型是什么?您的错误消息似乎与您提供的代码不一致。特别是,如果消息确实可归因于您所呈现的行,则表明arr
被声明为具有const
最终元素的三维数组。。这就是为什么您需要尝试创建一个。只有在编写int const*pRow=arr代码>或int const*pRow=&arr[1]
arr[n]
有什么问题?@SouravGhosh,指向arr[n]
的变量的类型是什么?您的错误消息似乎与您提供的代码不一致。特别是,如果消息确实可归因于您所呈现的行,则表明arr
被声明为具有const
最终元素的三维数组。。这就是为什么您需要尝试创建一个。只有在编写int const*pRow=arr代码>或int const*pRow=&arr[1]代码>请查看我修改过的问题。请查看我修改过的问题。在不解释常量的情况下尝试此操作会添加新警告,警告C4090:“=”:不同的“常量”限定符
。另外,我应该能够有一个指向const数据的指针,即使数据不是const,这只是意味着我不能通过指针修改它。请阅读此处,在不解释常量的情况下尝试添加新警告,警告C4090:“=”:不同的“const”限定符
。另外,我应该能够有一个指向const数据的指针,即使数据不是const,这只是意味着我不能通过指针修改它。请在这里阅读