c++ - 指针算术 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 这是一道考试题,不是真实案例。请不要问我对这段代码的逻辑使用
解决方案
推荐阅读
- angular - 如何绑定到其他组件中的属性
- android - 使用 Android OpenCV 在图像中检测到图案时拍照
- javascript - 在我的 phpmyadmin 共享服务器中更改时区
- python-2.7 - 尝试使用 NDB 将 Google App Engine Python 2 应用程序迁移到 Cloud NDB Python 3 库时出现导入错误
- docker - 构建docker镜像时如何在gitlab runner中缓存spacy模型
- go - 如何在 gRPC Protobuf 中为接口创建类型?
- javascript - 如果 HTML5 形式的文本框值是 x,那么 y: 这可能吗?
- html - 当父级的 z-index 与另一个 div 相等时,子级的 z-index 较高会隐藏绝对子级
- android - 在我的 react native 项目中哪里可以找到 tsconfig.json 文件
- kubernetes - dask.distributed 集群可以独立地自动缩放不同的工作人员吗?