为什么像++(++(* ++ b))这样的东西是非法的?

时间:2018-04-13 06:35:01

标签: c increment

#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;

为什么存在这种差异?

1 个答案:

答案 0 :(得分:-3)

由于

,以下int c = *++b+1+1;是合法的
  • 有3个运营商,即*+++,并检查man 1 operator *++具有相同的优先级,因此检查关联性是R-->L
  • 因此解决了*++b,这是有效的&amp;它给出了值2
  • 现在看起来int c = 2+1+1也是有效的C声明

并且int c = ++(++(*++b));是非法的,因为首先*++b会执行一个值,让我们说2(res)现在正在执行++res,这会产生一个整数值3 }直到这很好,接下来当你执行++3这是无效的,因为++适用于不在常量上的变量。所以它给出了左值错误。