请教这行代码temp = *(p - 1 - i);为什么是p - 1 - i

#include
#include
#include
int main(void)
{
char str[81];
char *p, temp;
int i, n, length;

gets(str);
for(p = str, i = 0, n = strlen(str); i < n/2; i++)
{
    temp = *(p + n - 1 - i);
    *(p + n - 1 - i) = *(p + i);
    *(p + i) = temp;
}
puts(str);

p = str;
length = 0;

do
{
    if(isalpha(*p))
        length++;
    else 
    {
        if(length > 1)
        {
            for(i = 0; i < length/2; i++)
            {
            temp = *(p - 1 - i);
            *(p - 1 - i) = *(p - length + i);
            *(p - length +i) = temp;
            }
        }
        length = 0;
    }
}
while(*p++ != '\0');
puts(str);

return 0;

}

char p定义了一个指针,p代表地址,是一种运算符,*p访问存储的数据,与取地址符&相反

char* p,*是一种运算符

 这段代码的作用是颠倒字符串,颠倒字符串的方法是第一个和最后一个交换,第二个和倒数第二个交换。
字符串的下标是0 ~ n-1
所以第 i 个应该和第 n - i - i 交换。

因为你的字符串是从0开始的啊,如果当i=0时,当然是和最后一个n-1-0位置上的字符进行交换啊