printf("%c%s\n",*a, b+1); 这个输出 a的第一个字符和b的第二个开始到结尾再换行,所以是 Program
while (putchar(*(a + i))) i++; 这个会输出 PROGRAM(每次循环输出一个字母)然后 printf("i = %d\n", i);输出此时i的变量,也就是当*(a+i)为\0的时候的i,所以是字符串长度7,再换行
while (--i) putchar(*(b+i)); 这个从后到前输出b,当i=1的时候,--i为0,不循环,所以这个不输出第一个字母p,是margor
然后输出了换行,再从b[3]也就是第四个字符开始输出b,所以是 gram
因为你的第一个while循环语句你面就会执行putchar()语句,所以他会先putchar((a+0))即输出P,然后下一次循环putchar((a+1))即输出R,以此类推,直到结束为0,退出判断
i = 0;
while (putchar(*(a + i)))
{
i++;
}
这个while()循环输出:PROGRAM