请高手帮忙解答2道C语言选择题

第一题:若定义int *p,*s[5],a[5];下列赋值语句中错误的是
A.s=a ; B,p=a ; C.p=s; D.p=s[0];
第二题我用图片插入了。
请高手解答下,说的详细点,最好把每个答案都分析下为什么对或错,先O(∩_∩)O谢谢了,在线等

第一题应该是选A,因为s和a都是数组名,代表的是地址常量,不能改变,即不能做左值被赋值。虽然s和p指针类型不同,但不会报错。最多是警告,并且是可以运行的。
第二题应该选A,首先将i写入文件,然后将j附加在i的后面,所以文件中的内容应该是33 44。主要是注意两次打开文件的方式不一样,如果都是W的话,后面写入的会覆盖前面的那么结果就是44了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-12-24
第一个题是C错了吧。
这样指针不兼容,一个是一级指针
一个是二级指针,不能直接赋值的。
第二个a+是追加的
那么就是分别写入了i和j
第2个回答  2010-12-25
答案是A
我上机试过
scanf("%s%s",a1,a2);
可以正常读取aa bb a1=aa b1=bb
gets(a3);gets(a4);
gets(a3)读取了一个空字符('/0')
gets(a4)读取了 cc dd
所以输出是A ,这个你自己上机调试跟踪就可以了。
这道题说明scanf和gets是有区别的,但我也说不清,上网查吧
第3个回答  2010-12-25
第一题答案AC都是错的
A的原因是:s是常量指针,是右值,不得出现在赋值号左边,且不论类型是否兼容
至于答案C,就是类型不兼容,并且如果D成立,则C就不会成立
相似回答