pre++、post++和*的优先顺序是什么?如何在VS08编译器中解析这些表达式。

 void main(){
        int arr[] ={34,11,43};
        int *ptr = arr;
        printf("%d",++*ptr++);
        printf("%d",++ptr++);
 }

解释l值表达式。我想知道为什么++*ptr++是一个有效的表达式,而++ptr++给出了错误。
error: '++' needs l-value

最佳答案

++p++

表示:前增量p和后增量p(未指定顺序)即使它被允许,它也会由于modifying p more than once before encountering a sequence point而调用未定义的行为。
无论如何,递增运算符post-和pre-返回rvaluervalue是表达式的值它没有可写入的位置,可以被视为中间值。
*p++

这个表达式最初产生一个左值,*p该位置可以写入,因此它由预增量递增,然后p本身递增增量将产生一个rvalue,但您不会试图修改它。

10-08 08:23
查看更多