C语言问题:指针变量,数组名,字符串常量的区别。

设有下面的程序段: char s[ ]="china" ; char * p; p=s; 则下列叙述正确的是:
(A) s和p完全相同
(B)数组s中的内容和指针变量p中的内容想等
(C)s数组长度和p所指向的字符串长度相等
(D)*p与s[0]值相等
答案选D 。A B C选项为什么错呢?错在哪里?

(A) s和p完全相同
a的类型是cha数组
p的类型是char指针
不一样
(B)数组s中的内容和指针变量p中的内容想等
数组s中的内容是: "china"
指针变量p中的内容是: s[0]的地址(&s[0])
一个是字符串 一个是地址
不一样

(C)s数组长度和p所指向的字符串长度相等
s数组长度包括 '\0'的位置
p所指向的字符串长度不包括 '\0'的位置
s数组长度 == p所指向的字符串长度 + 1 (1就是'\0'占有的位置)
显然 不相等
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-05
(A) s和p完全相同:s是字符串数组,p是字符指针,不同。
(B)数组s中的内容和指针变量p中的内容想等:s的内容"china",p的内容是s的首字节的内存地址,不同。
(C)s数组长度和p所指向的字符串长度相等:s数组长度是6(最后一位的值是0),p指向的字符串长度是5,不等。
(D)*p与s[0]值相等:正确。p=s,即p=&s[0],那么*p的值就等于s[0]。
第2个回答  2011-04-05
好长时间没看C语言了 有点忘记了
A、S为一个字符串,p为指针 概念不相同。
B、指针里面存储的是地址。
C、忘了 好像是字符串最后还有一个空白字符 所以要多一
D、s[0]是字符串的首位,而*p也是指向字符串的首位 所以一样
第3个回答  2011-04-05
A:s是字符数组,而p只是字符指针;
B:字符数组s存放的就是china,而p只是指向数组s的首地址;
C:s数组的长度就是china字符串的长度,为5,而p所指向的字符串长度还应包括字符串结尾的标识符'\0';
综上所述D是正确答案!
第4个回答  2011-04-05
A:不完全相同 比如p能自加 s不能 p++;
B:数组s中是很多元素 p中就一个元素s[0]
C:s数组长度>=p所指向的字符串长度相等 因为s[]可能很大 而只用了一部分

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网