对与这个习题的理解?????/

来源:百度知道 编辑:UC知道 时间:2024/05/29 07:28:40
#include<stdio.h>
void main(){
char s[]="1234567890",*p;
int i;
for(p=s+5;*p!='\0';p++)
printf("%c",*p)
p=s+4;
i=0;
while(i++<5)
printf("%c",p[-i]);
}

我的理解是这样的,当第一个FOR循环输出67890 可是到了p=s+4应该指向哪里??还有输出的P[-i]是什么意思?????????

正确答案是 678904321

请详细解答一下
请详细解答一下程序的运行过程也可以,谢谢了 很急!

p=s+4 和p[-i]

p=s+4
重新将p指向s[4]的地址,你明白p=s+5,难道不清楚p=s+4吗??
p[-1]:你要清楚[]中的下标表示什么,此时,p[0]是p的第0个元素,那么,p[-1]是p的第-1个元素,也就是p[0]的前一个元素,而p指向的是s[4],那么前一个元素是s[3],[-2][-3]都是一个道理.

--------------
你知道p=s+5指向的是6....那么p=s+4指向的是5...

p[-i]=*(s+4-i)=s[4-i],这样就很清楚了.
i从1到5,所以最后输出是s[3]到s[-1],越界了呢.
第二个while有问题哦.!