7.若有说明语句

问题描述:

7.若有说明语句
char a[]="It is mine";
char *p="It is mine";
则以下不正确的叙述是________.
a)a+1表示的是字符t的地址
b)p指向另外的字符串时,字符串的长度不受限制
c)p变量中存放的地址值可以改变
d)a中只能存放10个字符
8.下面程序的运行结果是_______.
#include
#include
main()
{
char *s1="AbDeG";
char *s2="AbdEg";
s1+=2;s2+=2;
printf("%d\n",strcmp(s1,s2));
}
a)正数 b)负数 c)零 d)不确定的值
9.下面程序的运行结果是_______.
#include
#include
fun(char *w,int n)
{char t,*s1,*s2;
s1=w;s2=w+n-1;
while(s1

7:答案b
char *p="It is mine"; 系统已经分配好内存,如果字符串的长度不受限制会造成指针溢出.
8:答案b strcmp函数比较字符串的大小,s1+=2;s2+=2;后,字符串变成了:*s1="DeG"; *s2="dEg"; strcmp函数开始比较,由于s1的第一个字符是D,值为68,s2的第一个字符是d,值为100,所以strcmp判定,s1比较小,返回负数.
9:答案c
这个程序的本意是想把字符串倒过来,也就是希望得到答案a,但是程序犯了个错误,看t=*s1++;*s1=*s2--;*s2=t; 这一句,t=*s1++;这个时候s1++,那么*s1=*s2--的时候;赋值的时候实际上已经把指针的位置后挪了,而且这个时候*s2--又把指针前挪,于是1717的挪个不停,改成这样就是答案a了,t=*s1;*s1=*s2;*s2=t;s1++;s2--;