二维字符数组输入输出问题

在输入输出二位字符数组的时候可以省略列数?如书上的例子:charstr[3][20];inti;for(i=0;i<3;i++)gets(str[i])/*我看了很多遍,... 在输入输出二位字符数组的时候可以省略列数?
如书上的例子:
char str[3][20];
int i;
for(i=0;i<3;i++)
gets (str[i]) /*我看了很多遍,为什么不是写成{gets (str[i][20])}呢,怎么觉得像是以为数组输入,是不是可以省略[20]?*/
展开
 我来答
庚午子李
推荐于2018-03-19 · TA获得超过369个赞
知道小有建树答主
回答量:156
采纳率:0%
帮助的人:122万
展开全部
str[i][20]是一个字符,不是字符串了,现在是输入字符串;
可以将str[i],看成是一个字符串名,就像char a[20] 中的a一样,这样就好理解了。
如果输入单个字符是用getchar(),这个函数
wskjuf
2011-04-23 · TA获得超过1289个赞
知道大有可为答主
回答量:1731
采纳率:0%
帮助的人:1779万
展开全部
这是因为gets的参数要求一个字符指针,而str[i]就表示一个字符指针,王八对绿豆,所以就对上眼了。

楼主要多实践才行,这些通过写程序很快就会明白。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
4747哦
2019-07-18 · TA获得超过675个赞
知道小有建树答主
回答量:365
采纳率:73%
帮助的人:71.7万
展开全部
多个字符串的输入输出
#include <stdio.h>
int main()
{
char a[3][20];
char *p;
int i;
p=a[0];//a[0]为列指针,p指向0行0列元素,p=a[0]+j指向0行j列元素。
for (i=0;i<3;i++)gets(a[i]);
// for (i=0;i<3;i++)printf("%s\n",a[i]);
for (i=0;i<3;i++)printf("%s\n",p+i*20); //指针寻址
;//第二个字符串开始的地址,应该是a[0][0]后移20个字符的地方。p是指向字符的指针
}
数组名表示列指针*(a+i)等价于a[i]列指针
#include <stdio.h>
int main()
{
char a[3][20];
int i;
for (i=0;i<3;i++)gets(*(a+i));//列指针*(a+i)和a[i]等价
// for (i=0;i<3;i++)printf("%s\n",*(a+i));
for (i=0;i<3;i++)printf("%s\n",*(a+i));
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
feifei031429
2011-04-23
知道答主
回答量:17
采纳率:0%
帮助的人:0
展开全部
按你给的代码读入的是string型,string长度是20;
可以写成你那样的,
如果上述代码读入的字符串长度超过20就会出错,而你的不会
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式