指针算术 post 和 pre decrement 在 VS2019 和 VS Code mingw-w64 中的行为不同

问题描述

我检测到 VS2019 C++ 和 VS Code (mingw-w64) 之间的差异是关于指针使用的前后递减。 VS2019 中的以下代码显示了打印数组的第三个元素 12 (a[2]):

答:

int a[] = { 10,11,12,13,14 };

int *p = a;
int *q = p + 3;

*q = a[(q--) - p];

cout << *q << endl;

如果我将后递减运算符更改为前递减:

乙:

int a[] = { 10,14 };

int *p = a;
int *q = p + 3;

*q = a[(--q) - p];

cout << *q << endl;

它再次打印 12 (a[2])

但是如果我使用 mingw-w64 在 VS Code 中运行代码,那么第一个代码块 A: 显示数组的第四个元素,13 (a[3]) 和块 B: 显示第三个元素,12 (a[2])

为什么 VS2019 在这种情况下忽略前后递减和 mingw-w64,如果我在赋值的左侧使用相同的指针,我用它来索引数组?

您对这种行为有任何经验/解释吗?

谢谢

Onur

ps 这是一道试题,不是真实案例。请不要问我这段代码的逻辑用法

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)