二维字符数组的定义二维字符数组的定义格式为:
char 数组名[第一维大小][第二维大小];
如:char c[3][10]; //定义了一个3行10列的二维字符数组c由于该二维数组的每一行 c[0]、c[1]、c[2] 均是含有 10 个元素的一维字符数组,即二维数组的每一行均可表示一个字符串。
二维字符数组的初始化通常情况下,二维数组的每一行分别使用一个字符串进行初始化。 例如:
char c[3][8]={{"apple"},{"orange"},{"banana"}};等价于:
char c[3][8]={"apple","orange","banana"};以上两条初始化语句中,二维数组的第一维大小均可省略。数组 c 的逻辑结构如下所示:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | ||||
---|---|---|---|---|---|---|---|---|---|---|---|
c[0] | a | p | p | l | e | c[1] | o | r | |||
a | n | g | e | c[2] | b | a | n | a | |||
n | a | char c[][10]={"apple","banana"}; | 0 | 1 | 2 |
以下均是对二维字符数组元素的合法引用:
以下是对二维字符数组元素的非法引用:
c[0][0]="A"; //行、列下标表示的为字符型元素,不能使用字符串赋值
printf ("%c",c[2]); //c[2]为第3行的首地址,不是字符元素,故不能用%c
【例 1】 分析以下程序,输出其运行结果。
字符串 "Apple" 的长度为 5,加上结束符 "\0" 共 6 个字符,前 5 个字符分别从 c[0] 行的首元素 c[0][0] 开始存放,到 c[0][4],第 6 个字符 '\0' 只能保存到 c[1] 行的首元素 c[1][0]。
字符串 "Orange" 的长度为 6,该字符串的前 5 个字符分别从 c[1] 行的首元素 c[1][0] 开始存放,到 c[1][4],第 6 个字符及结束符 '\0' 顺序存到 c[2][0] 和 c[2][1]。
字符串 "Pear" 的长度为 4,该字符串的 5 个字符(包含 '\0')分别从 c[2] 行的首元素 c[2][0] 开始存放,到 c[2][4]。
故该数组各元素中的值如下所示。
A | p | p | l | e | c[1] |
---|---|---|---|---|---|
O | r | a | n | g | c[2] |
P | e | a | r | printf ("%s\n",c[0]); //输出AppleOrangPearprintf ("%s\n",c[1]); //输出OrangPearprintf ("%s\n",c[2]); // Pear | |
由上述可以发现,该二维字符数组空间仅有一个字符串结束符 '\0',而 printf("%s",地址); 的功能是输出一个字符串,该串是从输出列表中的地址开始,到第一次遇到为止之间的字符组成的串。
c[0] 为 c[0] 行的首地址,即 &c[0][0]。
运行结果为:
AppleOrangPear
OrangPear
Pear
注意,本例题仅是为了说明数组的逻辑结构和存储结构的区别,程序设计时,应避免这种情况。 总结
以上是内存溢出为你收集整理的二维字符数组的定义,初始化及引用,C语言二位字符数组详解全部内容,希望文章能够帮你解决二维字符数组的定义,初始化及引用,C语言二位字符数组详解所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)