求C程序输出结果以及详情步骤

#include"stdio.h"main(){char*s,*s1="hereis",*s2="key";s=s1;从这里开始while(*s1!='\0')s1++;... #include "stdio.h"
main()
{char *s,*s1="here is",*s2="key";
s=s1; 从这里开始
while (*s1!='\0') s1++;
while (*s1++!=*s2++) s2=s;
while (*s2!='\0') s2++; 到这里每个while 执行过程及结果
printf ("s=%d\n",s);
printf ("s1=%d\n",s1);
printf ("s2=%d\n",s2);
printf ("%d-%d=%d\n",s2,s,s2-s);
}
为何输出中连个时s2,s值会不一样??
展开
 我来答
菜鸟学C加加
推荐于2016-11-25 · TA获得超过167个赞
知道小有建树答主
回答量:133
采纳率:0%
帮助的人:142万
展开全部
#include "stdio.h"
int main()
{
char *s, *s1 = "here is", *s2 = "key";         
s = s1;                                               
while (*s1 != '\0')
s1++;
while (*s1++ != *s2++) //s1已经是'\0'了
s2 = s; //一直往下找,找到*s1 = 'h'的地方
while (*s2 != '\0')
s2++; //s2为'\0'退出循环          
printf ("s = %d\n", s);
printf ("s1 = %d\n", s1);
printf ("s2 = %d\n", s2);
printf ("%d - %d = %d\n", s2, s, s2-s); //s为"here is"的地址,s2为"here is"后从'\0'开始的地址,
return 0;
}

不知道你为什么说地址会是一样的,

追问
第2个while 语句和s2输出的数据还是不理解,能再解释详细一些吗?另外你用的这个是什么软件?
追答
第二个while的意思是:
首先,s1指向“here is”字符串的最后一个‘\0’字符,s2这个时候指向“key”字符串
然后,让s1和s2地址都加1,看他们地址值是不是不相等,如果不相等的话,继续加1,不过这个时候s2变成了指向“here is”这个字符串了。
所以,第二个while循环就是让s1在内存中的地址一直找,找到*s1='h'的时候,就停止了。
不知道有没有讲清楚。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式