C语言题目!!

这个d是哪里错了是因为是一个数组字符么... 这个d是哪里错了 是因为是一个数组字符么 展开
 我来答
百度网友8b58de0
2019-03-18 · TA获得超过945个赞
知道小有建树答主
回答量:1079
采纳率:83%
帮助的人:315万
展开全部
D是错的,图片中的下面也有文字说明。下面看看我的详细解释:
A选项:
char *ch; ch="abc"; //ch是个指针,"abc"是一个字符串常量,常量是在内存中开辟的一个空间保存的,这个空间是只读的。语句中把ch指针指向这个常量的赋值是完全正确的。下面一段代码演示"abc"是只读常量:
void main()
{
char *ch; ch="abc";
*ch='d'; //程序可以编译链接通过,但是运行到这里程序会非法操作,出现系统提示,内存只能读
}
B选项:
char ch[]={'a','b','c'}; //这样赋值也没错,程序也能编译通过,但是你只能把ch当一个字符数组使用,而不能把它当字符串来使用,因为字符串必须用0结尾,你硬是要把它当字符串用,行,但是会出现很多不可意料的事情,比如printf(ch);屏幕上就可能出现:abc后面一堆其它的东西。这个选项错,是因为题目是问“能给字符串正确赋值”的语句,准确说这是给字符数组赋值而非字符串赋值。
C选项:
char ch[3]="abc";//这是字符串赋值语句,在B中也说了,字符串必须0结尾,但是空间只有3,放入了abc再放不下0了,空间不够,编译就不会通过,所以错了,char ch[4]="abc";就没问题。
D选项:
char ch[4];ch="abc";//ch空间够了,但是这是2条语句,char ch[4];已经开辟了空间,ch指向这个大小为4的空间,ch可以理解为一个指针,这个指针和这个4字节的空间捆绑在一起的,对应关系。ch="abc";同A要把这个指针重新指到另外一个字符串常量,那原先4字节空间就无主了,这编译怎么能让你通过。这是比较通俗的解释。正规的解释是:ch[4]是一个字符数组,字符串常量是不可以这样直接赋值给字符数组。除非是char ch[4]; strcpy(ch,"abc");这样拷贝过去才没问题。
解释不好,有问题可追问,谢谢采纳
百度网友5efaba2
2019-03-18 · 超过41用户采纳过TA的回答
知道小有建树答主
回答量:77
采纳率:100%
帮助的人:35.5万
展开全部
若是要像这样子的话,要在初始化的时候才可以
也就是ch[4]=“abc”,这是字符串的初始化形式
在外面的话就变成字符组了,就不能这样了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
余烬j
2019-03-18 · 超过21用户采纳过TA的回答
知道答主
回答量:58
采纳率:71%
帮助的人:18.8万
展开全部
ch是一个数组 ch[1]='abc'这样是合法的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
linjunlzy
2019-03-18 · TA获得超过1319个赞
知道小有建树答主
回答量:668
采纳率:82%
帮助的人:327万
展开全部
A选项给指针变量可以直接赋值,过程为将abc\0存入内存中,再返回这段字符串的地址。
更多追问追答
追答
而数组则不能整个这么赋值。你可以试试&ch="abc"
&ch[0]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式