关于c语言的问题

#include<stdio.h>
void main()
{
char s[]="9876",*p;
for(p=s;p<s+1;p++)
printf("%s\n",p);
}
我用编译器编译后输出的结果是“9876”,但是不知道是为什么。有没有人可以帮忙解释一下。

编译器把
for(p=s;p<s+1;p++)
printf("%s\n",p);
解释为:
p=s;
for(;;){
if(p>=s+1) break;
printf("%s\n",p);
p++;
}
现在你一看就明白了。如果把p<s+1改为p<s+2的话,那输出就是:
9876
876
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-01-03
循环执行时,p=s,满足p<s+1的条件, printf("%s\n",p)与 printf("%s\n",s);相同,因此打印的是“9876”,第二次循环时,p已经加1,等于S+1,因此循环不满足条件,不会执行。
第2个回答  2012-01-03
你输出的是指针的地址,应该是随机的数吧
第3个回答  2012-01-04
你这是输出字符串s。
问题在于p=s;
第4个回答  2012-01-03
这里的p=s是把数组s的首地址赋给指针p,这样p就指向了数组S的第一个值得地址上。p++就相当把指针往下移,指向下一个数组值的地址。%s指输出的是字符串。而最后的p是指输出指针p所致的那个地址上的值。s+1歧视就是用数组的长度加1追问

那如果把 for(p=s;p<s+1;p++)改成 for(p=s;p<s+2;p++)会打印出什么?

第5个回答  2012-01-03
同意2楼的解释!!
相似回答
大家正在搜