看来我是老了,越描越黑
我重新说下吧,你们当3楼我说的话放P
char str[]="xyz",*ps=str;
while(*ps)
ps++;
for(ps--;ps-str>=0;ps--)
puts(ps);
首先 str 数组 表示的 是 "xyz\0"
ps 是指向 str 的指针
str 的值 是 str 的首地址 ; ps的值 也是 str的首地址
while(*ps)
ps++;
只要ps 的地址不是 '\0',那么这个循环继续;这个循环结束时候它的位置 是在 '\0'处(因为 *ps 非真)
for(ps--;ps-str>=0;ps--)
puts(ps);
循环一开始 ,ps地址倒退1位,也就是 到了 'z', 也可以表示为 str + 2 ,那么 ps - str = str+2 -str = 2 > 0
所以输出 "z\0"
这次循环末,ps再次退1 位 位置是 'y' ,也就是 str + 1,剩下的就好解释了
……
至于程序最后,当 ps 退到 str 左边,也就是 str - 1 ,那么判断语句 就是 ps -str = str-1 -str = -1 >=0 这个条件非真,故跳出循环
PS:一直在想这个叫什么输出,开始叫 反序;但不能这么叫 因为 反序 表示的是 zyx;
能不能叫 “移 顺输出”