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
的第一个维度的有效索引只是 0
和 1
。您要查找的元素位于 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)
.
相同
我有二维数组
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
的第一个维度的有效索引只是 0
和 1
。您要查找的元素位于 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)
.