以下程序的输出结果是:

以下程序的输出结果是:
#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++;
printf ("%d-%d=%d\n",s2,s,s2-s);
}
之前一直不理解这个的结果是什么意思。。
在这里插入图片描述

#include "stdio.h"
main()
{char *s,*s1="here is",*s2="key"; 
s=s1; //从这里开始,print的s=s1=19748668,即字符串存储起始位置
while (*s1!='\0')	s1++;//s1向后走,直到字符串的末尾\0,此时printf的s1=19748675
while (*s1++!=*s2++)	s2=s;
//这行功能:比较s1与s2,s1的“h”(位置为s+1=19748669)与s2的“k”不同,则s2=s
//这行执行后:s1=19748922,s2=19748669
while (*s2!='\0')	s2++; 
//这行让s2查找至末尾\0: s2=19748675(*s2="here is")
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即“here is”的长度为7
}

每次执行程序,存储位置都不一定相同,故s,s1,s2的值每次都会有所不同,但是存储的相对位置是不会改变的,s2-s即“here is”的长度,为7。

猜你喜欢

转载自blog.csdn.net/qq_34752068/article/details/84332082