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

时间:2017-08-16 06:57:09

标签: c multidimensional-array pointer-to-array

我有二维数组

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

和指向此数组的指针

char(*ptr)[3]=arr;

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

3 个答案:

答案 0 :(得分:7)

您不应该打印arr[2][2],因为您正在访问数组越界。另请注意,在给定数组中没有'\0'个字符存储的空间。

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

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

答案 1 :(得分:3)

此:

char(*ptr)[3]=arr;

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

你的直接问题只是错误的指数。指数基于0,而不是1,因此

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

arr第一维的有效索引仅为01。您正在寻找的元素位于ptr[1][2]

在你的问题中使用指针算术符号,你实际上指数是正确的,所以我无法在这个的情况下看到你的问题所在。以下按预期打印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]

附注:如果您希望您的元素是字符串 - 它们不是,请参阅haccks' answer了解相关信息(字符串必须以'\0'结束,你的字符串文字可以,但你的数组需要有空间来容纳它。)

答案 2 :(得分:0)

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]未定义,因为您没有初始化它。

但是,如果你想选择那个意味着arr [1] [2]的元素i,它被置于*(*(arr+1)+2)之内。这可以表示为(ptr + 1)+2),因为sizeof(*ptr)sizeof(*arr)相同。