求解答关于左值的问题。

编译器报错error C2105: '++' needs l-value,见源程序

(p+len-1)=(p+len-1)+1为什么不能用*(p+len-1)++代替呢?

#include <stdio.h>
int main()
{
    int a[10]={0};
    int len;
    int i;
    int *p=a;
    char *ptr2;
    char s[500];
    int sum =0;
    char *ptr;
    gets(s);
    ptr=s;
    while(*ptr!='\0')
    {
        while(*ptr<65 || (*ptr>90 && *ptr<97) || *ptr>122) 
        {
            ptr ++;
        }
        ptr2 = ptr;
        while((*ptr != ' ') && (*ptr !='\0'))
        {
            ptr ++;
        }
        sum++;
        len=ptr-ptr2;
        if(len<=10)
            *(p+len-1)=*(p+len-1)+1;        //使用*(p+len-1)++,编译器报错
    }
    printf("%d ",sum);
    for(i=0;i<10;i++,p++)
        printf("%d ",*p);

} 

*(p+len-1)++
的语法你要先分析一下

可以拆成:
解引用p+len-1的值
然后需要对指针加1,而这个时候这个指针p+len-1是一个右值,所以没法进行++

(p+len-1)=(p+len-1)+1
这个也不行
=是赋值操作。
比如说
a = 1
b = 1这个可以
那么
a + b = 2这个算什么呢?
是a=1 b=1还是a=0 b=2?

*(p+len-1)代表一个地址,相当于一个变量

应该是运算符优先级的问题, (p+len-1)++中++优先级最高,先执行(p+len-1)++,然后 * 运算,正确表达应为((p+len-1))++