Adi*_*pra 2 c++ pointers operators
评估的顺序是++*ptr++什么?当指针和左值涉及到操作时,它会改变吗?
如果的优先级a++高于*a或++a,则将Why ++*a++评估为:首先返回递增的值,然后更改指针,而不是更改指针,然后在该位置递增值。优先权:https://en.cppreference.com/w/cpp/language/operator_precedence
arr = {9, 99, 999 };
int *ptr = arr;
std::cout << ++*ptr++ << '\t';
std::cout << *ptr;
Run Code Online (Sandbox Code Playgroud)
我期望输出为100 100,但实际输出为10 99。
后缀增量a++使指针ptr递增,但返回操作前ptr的副本(请参见前缀/后缀之间的区别)。因此,可以将其重写为++(*(ptr ++))(如Quimby的答案所述),它类似于:
在此之前/之后递增/递减的逻辑解释得很好:
预递增和递减运算符可递增或递减对象的值,并返回对结果的引用。后递增和后递减创建对象的副本,递增或递减对象的值,并从递增或递减之前返回副本。
来自:https : //en.cppreference.com/w/cpp/language/operator_incdec