首页 > 解决方案 > 指针算术 post 和 pre 递减在 VS2019 和 VS Code mingw-w64 中的行为不同

问题描述

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

A:

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

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

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

cout << *q << endl;

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

乙:

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

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

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

cout << *q << endl;

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

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

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

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

谢谢

奥努尔

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

标签: c++visual-studio-codevisual-studio-2019mingw-w64pointer-arithmetic

解决方案


推荐阅读