回 帖 发 新 帖 刷新版面

主题:有两题选择题希望大家帮助

1.若有"char *p="hello""则以下选项中错误的是____.
 A.char &a=*p;   B.char *s=*p;  c.char *q=p+2;  D.p=p+2;
   正确答案是:B.
2.设定义了说明语句:
  int k,j;
   下列选项中没有语法错误的表达式是____.
 A.(k++)++    B.(k+3)=5   C.k--/=5    D.k---j
  正确答案是:D.
  上面两题都是基本语法题,虽然有正确答案,但我却不知到错误的答案错在哪里.希望大家帮我指出.

回复列表 (共3个回复)

沙发

第1题,首先要理解char *p=“hello”,它并不是将整个字符串hello赋给指针变量p,它只是将字符串首地址(即在内存中存放字符串的字符数组的首地址)赋给p。
因此这里的p只是一个首地址。
A.意思是定义一个字符变量a,首地址为指针变量p指向的首地址(这个*只是声明p是指针变量,并不是什么p指针指向的一个值)。
C.意思是定义一个指针变量q,使它指向p的下两个元素。
D.意思是使p指向下两个元素。
而对于B项,它定义一个指针变量s,但赋值的时候仅付了p所指向的首地址的值。肯定不合法。
第2题,首先要明白,自增或自减运算,只能用于变量,而不能用于变量表达式,所以A选项不合法。B项不应该加括号。C选项中变量表达式也不能参与复合的赋值运算。
D项遵循从右至左的原则进行运算,即k-(--j)。

板凳

十分感谢cy88310的详细解答!

3 楼

呵呵 学到了东西 高兴
c语言已经学习了两年吧

我来回复

您尚未登录,请登录后再回复。点此登录或注册