2 回答
TA贡献883条经验 获得超454个赞
B 选项你应该懂的,对吧。 这就是简单的用“初始化列表”来初始化数组。
但我要提醒下:这个 s2 只是个“字符数组”,不能当作字符串。因为 s2 中只有这 5 个字符,没有结尾的 '\0',无法构成 C 语言中定义的字符串。 s2 作为一个字符数组当然是合法的,这没问题。
你还记得我在 35 题(https://www.imooc.com/wenda/detail/412699)中提到“字符串字面量可以用来初始化字符数组”吧。 所以 C 选项是没问题的。
数组本身是不能被直接赋值的! 也就是你不能像这样 s1 = s2 把另一个数组 s2 赋值给 s1 数组。
你应该记得“字符串字面量”就是数组,所以 s1="Ctest" 是不正确的。 其实这里发生的事要更复杂些:这里右侧的字符串字面量同样会隐式转换为指向首元素的指针,就是说实际上 s1 是在被试图用 char 指针赋值。而 s1 是数组,根本就不能被赋值。
所以 A 选项是错的。
也许你觉得 s1="Ctest" 看起来和 C 选项差不多啊。但关键区别就是:只能在定义数组并初始化时这样做(参考 C 选项中的解说)
D 选项嘛,你应该能够自己推导了。 等号右侧还是会转换为“指向首元素的指针”,也就是字符指针类型,刚好可以为 s4 作初值。
还要提醒下:字符串字面量是不可修改的,那么你不能通过指向它的字符指针 s4 来修改这个字符串中的字符。 如果你这样做了,程序在运行到此时通常会出错退出(大概率直接崩溃掉)
顺便提一下:前面那个回答不太正确,s1 是数组没错。
顺便再黑一下题库:这个题目也不严谨,应该说除了 A 选项是“赋值”外,其余 BCD 都是“初始化”
- 2 回答
- 1 关注
- 4064 浏览
添加回答
举报