初学指针的一个问题???????

来源:百度知道 编辑:UC知道 时间:2024/05/25 07:19:49
#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-1]);

}

这个程序的运行结果是多少啊??答案是6789056789

对吗??? 怎么做的呢

一、首指针s指向s[0]的地址,故s+5指向s[5]的位置,同理,s+4指向s[4]的位置。
二、while(i++<5);这种写法是不提倡的,因为i++,++i很难分辨i的值,首先可以把i++看成一个表达式,i++的用法:先用后加,亦即先用i的值代表i++的值,之后才有i=i+1。具体到while(i++<5) ;,就是先用i++的值(也就是i)和5比较大小,比较完之后,i的值再增大1 。
三、再说一下++i的用法:先加后用,即i先增加1,之后再球++i的值,也就是加了1之后的i,若while(i++<5) ;改成while(++i<5) ;,就变成了,i先增加1,之后再和5比较大小,这样结果就成了678905678
四、建议,避开i++,++i。

答案是正确的。
for(p=s+5;*p!='\0';p++)
printf("%c",*p);
后将会输出:67890;
(P=s+5,使得指针指向6位置,从6开始输出到结尾(*p!='\0')结束)
p=s+4;
i=0;
while(i++<5)
printf("%c",p[i-1]);
将会继续输出56789
(P=s+4,使得指针指向5位置,从5开始输出到i=4时结束(i=5 跳出循环),共输出5个数字)

for(p=s+5;*p!='\0';p++)
printf("%c",*p);
首先p指向了s+5,也就是6所在的位置,上面的for是不断输出,直到遇到字符串结束['\0'],所以是67890

p=s+4;
i=0;
while(i++<5)
printf("%c",p[i-1]);
此p指向了s的第4位置,即5,while控制输出5次,输出的结果是p[i-1]!
i=0时,
while (i++<5) 成立