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,但您不会试图修改它。