黑马程序员技术交流社区

标题: 求问第十五题,A D为什么错? [打印本页]

作者: 克莱斯勒    时间: 2015-9-6 21:31
标题: 求问第十五题,A D为什么错?
15.以下正确的程序段是(C )。-----------------
A. char s[20];                               B. char *s;
scanf("%s", &s);                             scanf("%s", s);
C. char s[20];                               D. char s[20], *t=s;
scanf("%s", &s[2]);                           scanf("%s", t[2]);
作者: cuifei    时间: 2015-9-6 21:33
A 数组名就代表数组第一个元素的地址,s本身是一个地址再加上&的符号就错了嘛
作者: 克莱斯勒    时间: 2015-9-6 21:34
cuifei 发表于 2015-9-6 21:33
A 数组名就代表数组第一个元素的地址,s本身是一个地址再加上&的符号就错了嘛 ...

明白了,那D选项为什么错?
作者: cuifei    时间: 2015-9-6 21:40
克莱斯勒 发表于 2015-9-6 21:34
明白了,那D选项为什么错?

看看%s,%p,%d,都打印的各是什么,前后要对应噢
作者: 冰魄城主    时间: 2015-9-6 22:20
首先数组和字符串的定义搞清楚,这2个不是一个东西,a定义的事数组,所以你如果&s只是取数组首元素的地址
作者: 冰魄城主    时间: 2015-9-6 22:22
d之所以错,这里你的t是一个指向字符数组的指针,这里的t[2]指的是字符数组中首元素地址加2.
作者: 冰魄城主    时间: 2015-9-6 22:23
你这道题表示的是打印输出字符串和字符数组,你可以仔细看看如意大师的视频
作者: coding_wang    时间: 2015-9-6 23:02
15.以下正确的程序段是(C )。-----------------
A. char s[20];                               B. char *s;
scanf("%s", &s);                             scanf("%s", s);
C. char s[20];                               D. char s[20], *t=s;
scanf("%s", &s[2]);                           scanf("%s", t[2]);

1.


第一题的语法没有错误,只是它的逻辑错了,它没有按照逻辑的意思把 得到的字符串存储到 s[20]整个字符串中.

2.D选项有两个错,首先   t[2]不能以 %s的形式输出   第二   scanf 中 的t[2]不是一个地址 而是一个值, 它应该以 &t[2]的形式出现

作者: bustle    时间: 2015-9-7 00:43
赞同楼上。A中去掉scanf中的取地址符号&就可以了。
作者: fangshiqi    时间: 2015-9-7 01:13
同样的问题困扰,看到下面大神解释  瞬间清晰了。
作者: Joker_999    时间: 2015-9-7 08:47
涨知识了,嘻嘻




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2