C语言中如何使用指向多维数组的指针?

How to use pointer to multi dimentional array in C language?

我有二维数组

char arr[2][3]={"sam","ali"}

和指向这个数组的指针

char(*ptr)[3]=arr;

如何使用此指针打印 arr[2][2],在本例中为 i。 我已经尝试过 * (*(ptr+1)+2) 与我处理数组相同的方式,但没有用,所以任何人都可以帮助并告诉我如何处理指向数组的指针,在这种情况下打印元素 [2][2]

你不应该打印 arr[2][2] 因为你正在越界访问数组。另请注意,没有 space for '[=12=]' 字符存储在给定数组中。

char arr[2][4] = {"sam","ali"}  
char(*ptr)[4] = arr;

使用 ptr 您可以访问 arr 的元素作为 ptr[1][2]

这个:

char(*ptr)[3]=arr;

不是指向多维数组的指针,它是指向大小为3[=50=的一维数组的指针].但这很好,因为指针总是也可以指向它指向的类型的 array。因此,您 ptr 指向一个 一维数组,大小为 3。到目前为止只是为了澄清条款。

您的直接问题只是错误的索引。索引基于 0,而不是 1,因此

char arr[2][3]={"sam","ali"}

arr 的第一个维度的有效索引只是 01。您要查找的元素位于 ptr[1][2].


在你的问题中使用指针算术符号,实际上你的索引是正确的,所以我看不出你的问题在this 案例。以下按预期打印 i

#include <stdio.h>

int main(void)
{
    char arr[2][3]={"sam","ali"};
    char(*ptr)[3]=arr;
    printf("%c\n", *(*(ptr+1)+2));
}

请注意,这完全等同于更具可读性的 ptr[1][2]


旁注: 如果您希望您的元素是 strings——它们不是,请参阅 解释(字符串必须以 '[=24=]' 结尾,您的字符串文字可以,但您的数组需要空间来容纳它)。

char arr[2][3]={"sam","ali"}

脱糖成

char arr[2][3]={{'s','a','m'},
                {'a','l','i'}}

接下来,

char(*ptr)[3]=arr;

表示a pointer to an array of 3 elements of type char

arr[2][2] 是未定义的,因为你没有初始化它。

但是,如果您想 select 表示 arr[1][2] 的元素 i,它被脱糖为 *(*(arr+1)+2)。这可以表示为 ((ptr+1)+2) 因为 sizeof(*ptr)sizeof(*arr).

相同