C语言,数组题目,第四题,为什么C,D两个选项是不合法的

 我来答
GTA小鸡
高粉答主

2014-09-13 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.6万
采纳率:78%
帮助的人:1.3亿
展开全部
要理解这个问题你要先理解字符数组和字符串常量的关系
C语言指针可以代替数组使用,会导致很多混淆概念。在一个字符数组a[]里,变量a实际上是一个指针,它指向数组的初始地址,即a[0]数据所在的地址,而整个数组的数据存储是连续的,它们被依次存放在从a[0]地址起始的相邻的存储单元内。
如char a[]={"Hello World"}一句,声明这一句后,编译器会开辟一片连续的空闲地址,并从第一个字符H开始,把Hello World\n这些字符依次存储到一片连续地址内,然后创建指针char *a,指向第一个字符H的起始地址。也就是:数组代表数组所在内存位置的首地址。
上面这句话同样也可定义为:char *a;a="Hello World"。一个字符型的指针为什么可以存储一串字符串?这些字符叫做字符串常量,而a存储的并不是这一串字符串常量,而是第一个字符H的起始地址。由于是连续存储的,只要知道起始地址,通过地址偏移就可以输出后面的字符,直到遇到\n为止。
因此再总结一遍:字符串数组存储的是第一个字符的地址。
而现在你就知道C为什么是错误的了。char a[2]={"a","b"},这句话声明了一个字符串数组,长度为2,但赋给了它两个字符串常量"a"和"b"同时作为起始地址,一个指针指向了两个地址,这会产生const char*型转char型的报错。正确写法应该为:char a[2]={‘a’,'b'}或char a[3]={"ab"},编译器会将字符a的起始地址传到指针a。D的错误也是一样的。
文正153
2014-09-13 · TA获得超过2.1万个赞
知道大有可为答主
回答量:2221
采纳率:63%
帮助的人:635万
展开全部
CD是合法的,但C会产生警告.而D则完全不会产生警告,而你没有把D后面半部分照全,所以没法帮到你.而C正是后面半部分说错了.
追问
谢谢~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
太原大海
2014-09-13 · TA获得超过799个赞
知道小有建树答主
回答量:553
采纳率:75%
帮助的人:329万
展开全部
C中字符初始化应使用单引号,如'A'。D中不能给数组名赋值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式