计算机二级C语言考试

img


计算机二级C语言考试,看不懂解析,麻烦各位帮忙解释下!谢谢!

*p 是个指针, p = b ==> p 指向字符串 *b = "Welcome you to Beijing!" 的首地址,即字符‘W'。
while(*p != *a) p++; 这句是在字符串 b 查找,字符串 a 的首字符’y' 出现的位置并用 p 标记,即*p=‘W', *a='y' ,*p != *a ,p++; *p='e',*a='y', *p != *a,p++;....*p='y',*a='y', *p == *a 跳出while循环。
此时,p 定位在字符串 b 的’y‘字符上,*p = 'y'。
p+=strlen(a)+1 ==> p = p+strlen(a)+1 = p+3+1=p+4, p+偏移量4 ,将指针p从'y'开始后移4个字符,此时指针p 定位在字符 't'上 ,即 *p = 't'。
printf("%s",p); 输出指针p 指向的字符开始,直到遇到'\0'结束符的所有字符,即 p = “to Beijing!",所以最后输出:to Beijing!

我们通过while循环,一直没有找到相同的所以一直++,直到遇到y,所以会退出while循环。
然后又因为p+=strlen(a)+1.所以 p+4,然后到t,然后因为输出数组名所以 to beijing!

while循环找对应的字符地址,后边的语句累加后边的字符然后输出