编译器报错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))++