c语言填空题

c语言填空题,第7题怎么做大佬们,求解析

s是字符数组s[]的首个元素的地址,

s+2指向7,p<s+2,所以最多只能指向8,
所以程序运行结果为:98追问

不是的,答案是9876876

输出语句的那个星号要去掉

我对这个答案不理解,不知道怎么算的

你会吗老哥,可以教下我详细解析步骤吗

追答

s是数组名,在c语言中数组名是整个数组首元素的地址,
s+2得到的地址是数组第三个元素的地址,
p=s是让p指针指向s[]数组的首元素地址,

p++使指指向数组的下一个元素的地址,
循环中的条件p<s+2,所以循环最多循环2次,
所以只会打印98

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-09-03
错题,printf("%s",*p);很多好一点的编译器下连编译都不会过(都会出现运行错误)。要是是printf("%c",*p);的话输出是98;要是是printf("%s",p);的话输出是9876876。追问

你好,我想问下后面这个876怎么出来的,我基础有点差,抱歉

6<s+2,这次循环输出9876

在次循环就是用\0<s+2比较了对吗

追答

第一次用p与s+2比较,第二次用p+1的值与s+2比较。

追问

第一次是9<s+2,s+2也就是7,9<7这个条件不成立

第二次是8<7也不成立

第三次循环7<7也不成立

第四次6<7成立输出9876

后面p++那就是\0了,所以我不知道后面876怎么出来的

老哥教下我详细步骤,感激不尽

追答

p++使p增1。原先p==s,即p是指向9的;p++后就指向8了,怎么会是'\0'?'\0'在6后面呢!
不是9<s+2而是p<s+2——p是指向9的,是9的地址,s+2是7的地址,比较的是两个地址而不是这些地址里的数。数组从低地址向高地址依次存放,所以9的地址小于8的地址小于7的地址……