请高人指点一道C语言指针题,线上等

来源:百度知道 编辑:UC知道 时间:2024/05/18 07:42:10
以下程序的输出结果是?
#include <string.h>
main()
{char b1[8]="abcdefg",b2[8],*pb=b1+3;
while(--pb>=b1) strcpy(b2,pb);
printf("%d\n",strlen(b2));}

麻烦请详细的写出解题思路,万分感谢!

while(--pb>=b1) strcpy(b2,pb); //循环3次,这个我想你应该能看懂吧

程序的结果为7

最容易错的地方while(--pb>=b1) strcpy(b2,pb);
循环第一次 *pb='c' pb指向了数组b1[2]的位置
第2次 *pb='b' pb指向了数组b1[1]的位置
第3次 *pb='a' pb指向了数组b1[0]的位置
所以执行strcpy(b2,pb); 后,你可以把b2也理解成一个指针,(但不是,它是常量),从pb位置开始进行复制,因为b1[8]中只有7个值,
所以b2数组为abcdefg 7个