#include <stdio.h>
int main()
{
int a[3] = {1, 2, 3};
int *b = a;
int c = ++(++(*++b)); /* error: lvalue required as increment operand */
printf("%d", c);
return 0;
}
但以下是合法的:
int c = *++b+1+1;
为什么存在这种差异?
答案 0 :(得分:-3)
由于
,以下int c = *++b+1+1;
是合法的
*
,++
和+
,并检查man 1 operator
*
和++
具有相同的优先级,因此检查关联性是R-->L
*++b
,这是有效的&amp;它给出了值2
int c = 2+1+1
也是有效的C
声明并且int c = ++(++(*++b));
是非法的,因为首先*++b
会执行一个值,让我们说2(res)
现在正在执行++res
,这会产生一个整数值3
}直到这很好,接下来当你执行++3
这是无效的,因为++
适用于不在常量上的变量。所以它给出了左值错误。