如何创建指向二维字符数组的指针,然后打印输出 #包括 int main(){ 字符映射[3][6]={ {'a','.','.','.','.','.','.'.'.'.'.'.'.'.'.}, {'.','.','.','.','.','.'}, {'.','.','.','.','.','.'} };//创建新的游戏地图 char*newmap=map; printf(“%c”,newmap);//打印第一个元素 返回0; }

如何创建指向二维字符数组的指针,然后打印输出 #包括 int main(){ 字符映射[3][6]={ {'a','.','.','.','.','.','.'.'.'.'.'.'.'.'.}, {'.','.','.','.','.','.'}, {'.','.','.','.','.','.'} };//创建新的游戏地图 char*newmap=map; printf(“%c”,newmap);//打印第一个元素 返回0; },c,C,我的代码不起作用。我试图创建一个指向映射[3][6]的指针,然后能够从指针打印数组。您对指针和数组有误解。当您声明: #include <stdio.h> int main() { char map [3][6] = { {'a','.','.','.','.','.'}, {'.','.','.','.','.','.'}, {'.','.','.','.','.','.'} };//Crea

我的代码不起作用。我试图创建一个指向映射[3][6]的指针,然后能够从指针打印数组。

您对指针和数组有误解。当您声明:

#include <stdio.h>

int main() {
    char map [3][6] = {
            {'a','.','.','.','.','.'},
            {'.','.','.','.','.','.'},
            {'.','.','.','.','.','.'}
    };//Create a new game map
    char* newmap = map;
    printf("%c",newmap); //Print first element
    return 0;
}
您已经声明了一个
char[6]
数组(例如数组数组数组)。要了解发生了什么,您必须了解由

(p3)除非它是
sizeof
运算符的操作数,否则
\u Alignof
运算符,或一元
'&
运算符,或是字符串 用于初始化数组的文本,该数组是一个具有 “类型的数组”转换为类型为“指向类型的指针”的表达式,该表达式指向数组对象的初始元素,并且 不是左撇子

注意:C17作为例外删除了
\u Alignof

应用数组指针转换,在访问
时,map
被转换为
char(*)[6]
类型的指针(指向
char[6]
数组的指针)。因此,如图所示,要使用
map
newmap
,您需要:

char map [3][6];

然后,要输出单个字符,可以使用
putchar(**newmap)
将输出第一个6字符数组中的第一个字符。指针算术按
sizeof(*newmap)
前进(这是
char[6]
的数组)。所以
putchar(*newmap[1])
将输出2D数组中第二行的第一个字符。

多维数组也存储为其较少维度数组的集合。 二维数组存储为一维数组的数组

在上面的问题中,您有map[3][6]的二维数组,该数组存储为一个数组,该数组存储3个大小为6的一维数组。因此,map[3][6]将返回一个指向每个索引中有6个元素的一维数组的指针

所以指针应该像char(*ptr)[6]=map

现在我们有了一个指针,通过它我们可以访问数组

ptr[0]将是['a'、'.'、'.'、'.'、'.'、'..'.]并且ptr[0][0]将是'a'

为了更清楚的解释,你可以在YouTube上观看MyCodeSchool的指针系列


不要忘记将数组视为字符串所需的
'\0'
。您的指针必须是
char(*newmap)[6]=map以字符为单位使用。使用
putchar(*newmap)
输出一个字符。@Lucas-是的,没错。我编辑了评论——很好。(但我会告诉你一个秘密…
char**ptr=&newmap;
是非常错误的。在你做了
ptr++
之后,
ptr
指向哪里?--提示:它将取决于你正在使用的体系结构的大小(指针)
,而不是你想要的)不用担心——这只是学习数组和指针的一个常见障碍。
putchar(newmap[1])
会给你一个错误,因为
newmap[1]
属于
char*
类型<代码>放置(newmap[1])将给出第二行。我检查了我的系统。请检查。@KrishnaKanthYenumula Yikes,抓得好
newmap[1]
是类型
char[6]
,因此您是正确的,我们需要
*newmap[1]
--谢谢!
char (*newmap)[6] = map;
#include <stdio.h>

int main() {
    char map [3][6] = {
            {'a','.','.','.','.','\0'},
            {'.','.','.','.','.','\0'},
            {'.','.','.','.','.','\0'}
    };//Create a new game map
    char (*newmap)[6] = map;
   
   for( int i=0;i<3;i++)
   {
     printf("%s\n",newmap[i]); 
   }
    return 0;
}
a....
.....
.....