使用指针数组递增和递减

use*_*306 3 c++ arrays pointers

我的老师给了我这个代码,它返回31,40,但我无法弄清楚原因.它返回它的原因是什么原因?

void main() {
    int *ptr;
    int arr[5] = { 10, 20, 30, 40, 50 };
    ptr = &arr[3];
    cout << ++*ptr-- << ", " << *ptr;
}
Run Code Online (Sandbox Code Playgroud)

Jar*_*d42 5

cout << ++*ptr-- << ", " << *ptr;
Run Code Online (Sandbox Code Playgroud)

operator <<(cout.operator <<(++*ptr--), ", ").operator <<(*ptr);
Run Code Online (Sandbox Code Playgroud)

问题可以简化为:

f(f(ptr--), ptr)
Run Code Online (Sandbox Code Playgroud)

而在f(ptr--)和之间的评估顺序ptr是未指定的(并且更具体地说在ptr--和之间ptr).

所以你得到了给定代码的未定义行为.

  • @KennyOstrom不,这是未定义的. (2认同)