我有二维数组
char arr[2][3]={"sam","ali"}
和指向此数组的指针
char(*ptr)[3]=arr;
我如何使用此指针打印arr[2][2]
在这种情况下i
. 我已经尝试* (*(ptr+1)+2)
处理数组的相同方式,但没有奏效,所以任何人都可以提供帮助并告诉我在这种情况下如何处理指向数组的指针以打印元素[2][2]
。
您不应该打印arr[2][2]
,因为您正在越界访问数组。另请注意,给定数组中没有存储' '
字符的空间。
char arr[2][4] = {"sam","ali"}
char(*ptr)[4] = arr;
使用ptr
,您可以像ptr[1][2]
一样访问arr
的元素。
这个:
char(*ptr)[3]=arr;
不是指向多维数组的指针,而是指向大小为3
的一维数组的指针。但这很好,因为指针也始终可以指向它所指向类型的数组。因此,您必须ptr
指向大小为3
的一维数组数组。到目前为止,只是为了澄清条款。
您的直接问题只是错误的索引。索引是基于0
,而不是1
,所以
char arr[2][3]={"sam","ali"}
arr
第一维的有效索引只是0
和1
。您正在寻找的元素将在ptr[1][2]
.
使用您问题中的指针算术符号,您实际上索引正确,因此在这种情况下我看不到您的问题在哪里。以下打印按预期i
:
#include <stdio.h>
int main(void)
{
char arr[2][3]={"sam","ali"};
char(*ptr)[3]=arr;
printf("%cn", *(*(ptr+1)+2));
}
请注意,这完全等同于更具可读性的ptr[1][2]
。
旁注:如果你希望你的元素是字符串- 它们不是,请参阅haccks的答案的解释(字符串必须以' '
结尾,你的字符串文字可以,但你的数组需要空间来容纳它(。