评估的顺序是++*ptr++
什么?当指针和左值涉及到操作时,它会改变吗?
如果的优先级a++
高于*a
或++a
,则为什么要被++*a++
评估为:首先返回递增的值,然后更改指针,而不是更改指针,然后在该位置递增值。优先权:https://en.cppreference.com/w/cpp/language/operator_precedence
arr = {9, 99, 999 };
int *ptr = arr;
std::cout << ++*ptr++ << '\t';
std::cout << *ptr;
我期望输出为100 100,但实际输出为10 99。
后缀增量a++
使指针ptr递增,但返回操作前的ptr副本(请参见前缀/后缀之间的区别)。因此,可以将其重写为++(*(ptr ++))(如Quimby的回答中所述),如下所示:
在此,可以很好地解释前后递增/递减的逻辑:
预递增和递减运算符可递增或递减对象的值,并返回对结果的引用。后递增和后递减创建对象的副本,递增或递减对象的值,并从递增或递减之前返回副本。
来自:https : //en.cppreference.com/w/cpp/language/operator_incdec
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句