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