为什么C语言这里就可以用str[0]和str[1]表示长度为20的字符串

#include "string.h" /* strcmp、strcpy函数均在string.h中定义 */
void main()
{
char string[20]; /* 存最大字符串 */
char str[3][20]; /* 三个字符串 */
int i;
for(i=0;i<3;i++)
gets(str[i]); /* 输入三个字符串 */
if (strcmp(str[0],str[1]) > 0) strcpy(string,str[0]);
else strcpy(string,str[1]);
if (strcmp(str[2],string) > 0) strcpy(string,str[2]);
printf("\nthe largest string is: \n%s\n",string);
}
我知道这是一个很典型的三个字符串输出最大字符串的程序

char str[3][20]; 定义了一个字符类型的二维数组 ,通过数组名str[0]可以调用的是第一个字符串 后面的20为字符串的长度。这种定义方法跟数组的指针有关系  

C Prime Plus 有关于这个的讲解 类似于这样的程序

在第十章字符串和字符串函数有,这本书讲的特别透彻,希望能帮到您

追问

那只能理解为是这么引用的了,谢了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-09-22
char str[3][20]; 是一个二维数组,

由三个长度为20的字符串数组组成。
三个数组的第一元素分别可以是str[0][0],str[0][1],str[0][1]
按按数组特性,当去掉下标是就是就是该数组地址,
因此str[0],str[0],str[0]分别代表三数组地址。
三个数组容量为20,使用sizeof函数可以获取容量大小,
长度由为从头开始到‘\0’,使用strlen函数可以获取长度。

请楼主确认下,你获取的长度是容量还是字符串长度。追问

因此str[0],str[0],str[0]分别代表三数组地址这句话应该是str[0] str[1] str[2]吧。我没有取长度吧,。就是一个字符串大小比较从左到右。
还有就是“按数组特性,当去掉下标是就是就是该数组地址”有这说法吗

追答

char arr[10] = 0;
容量为10
长度为0
arr或者&arr[0]为元素首地址,arr+1为第二元素地址
arr也是数组名
&arr为数组地址,地址和arr相同但是用处不同

同理可以推导二维数组。
同时你可以尝试下敲个代码,输出它们的地址,一看就明白了

本回答被网友采纳
相似回答