作者:yuhao | 来源:互联网 | 2023-05-24 21:27
我的老师给了我这个代码,它返回31,40,但我无法弄清楚原因.它返回它的原因是什么原因?
void main() {
int *ptr;
int arr[5] = { 10, 20, 30, 40, 50 };
ptr = &arr[3];
cout <<++*ptr-- <<", " <<*ptr;
}
Jarod42..
5
cout <<++*ptr-- <<", " <<*ptr;
是
operator <<(cout.operator <<(++*ptr--), ", ").operator <<(*ptr);
问题可以简化为:
f(f(ptr--), ptr)
而在f(ptr--)
和之间的评估顺序ptr
是未指定的(并且更具体地说在ptr--
和之间ptr
).
所以你得到了给定代码的未定义行为.
1> Jarod42..:
cout <<++*ptr-- <<", " <<*ptr;
是
operator <<(cout.operator <<(++*ptr--), ", ").operator <<(*ptr);
问题可以简化为:
f(f(ptr--), ptr)
而在f(ptr--)
和之间的评估顺序ptr
是未指定的(并且更具体地说在ptr--
和之间ptr
).
所以你得到了给定代码的未定义行为.
@KennyOstrom不,这是未定义的.