为什么是p-2而不是p-1

问题遇到的现象和发生背景
用代码块功能插入代码,请勿粘贴截图

#include
#include
#include
void fun(char *p)
{
int n=0;
while(*p++)
{
n++;
}
p-=2;
while(n--)
{
printf("%c",*p--);
}
}

int main()
{
char str[100]={0};
gets(str);
fun(str);
_getch();
return 0;
}

因为是while(*p++),结束条件是p指向字符串结束符。while结束后,p++使得指针又向后移动一位,指向字符串结束符之后的一个字节。由于第二个循环需要从字符串最后一个有效字符开始倒序输出字符。所以p实际需要向前移动两个字节才能指向第一个有效字符。

因为是while(*p++)而不是while(*++p),所以当p已经指向了\0的时候,循环是跳出了,可是p又执行++了
那么p-1是退回到字符串最后一个字符了,字符串最后一个字符是\0,你输出它那肯定是不对的,应该从再前面一个开始输出,所以是-2