首先评估表达式的哪一侧?

fud*_*din 2 c operator-precedence

表达式的右侧是先评估还是左侧评估?

void main ()
{
    int i = 0 , a[3] ;
    a[i] = i++;
    printf ("%d",a[i]) ;
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 16

未指定赋值运算符的操作数的评估顺序:可以按任何顺序评估操作数.

但是,此表达式(a[i] = i++)会产生未定义的行为,因为您同时修改i(使用i++)并单独读取i(使用a[i])这些操作之间没有序列点.

  • @msakr:C标准§6.5/ 2:"在上一个和下一个序列点之间,对象的存储值最多只能通过表达式的计算来修改一次.此外,先前的值应该是只读的,以确定存储." (2认同)