【问题标题】:Cout printing with array pointers - weird behavior使用数组指针进行 Cout 打印 - 奇怪的行为
【发布时间】:2020-10-24 09:21:27
【问题描述】:

我在玩指针,得到了我没想到的结果:

#include 
#include 

int main() {
    int arr[4] = { 1, 2, 3, 4 };
    int* pArr = arr;
    std::cout 

两种不同的结果:

1 2 3 4 - 按照预期使用第一种方法

4 3 2 1 - 使用带有多个参数的cout我不知道正确的名称

所以我的问题是 - 为什么会发生这种情况?使用多个 cout 语句会产生预期的 for me 代码,而仅使用 1 个 cout 会产生向后的解决方案。

作为旁注,另一个令我困惑的事情是预增量导致所有值都相等。在注释的代码位中,无论++ 相对于* 的位置如何,结果都是3 3

【问题讨论】:

标签: c++ increment cout


【解决方案1】:

这段代码:

std::cout << "\n" << *pArr2++ << "\n";
std::cout << "\n" << *pArr2++ << "\n";

pArr 有明确的修改顺序并将打印

1
2

但是这段代码:

std::cout << "\n" << *pArr2++ << "\n" << *pArr2++ << "\n";

在 c++17 之前调用未定义的行为,因为对 pArr2 有多个未排序的修改。该程序有UB,所以它可以打印任何东西。

从c++17开始,修改之间有一个序列点,上面的代码保证打印:

1
2

【讨论】:

  • cigien,帮我一个忙,看看这个:stackoverflow.com/questions/62666619/…,如果你有时间的话。在过去的几天里,我一直在试图弄清楚提问者是否被 MSVC 中的错误绊倒,或者我是否遗漏了什么。
猜你喜欢
  • 1970-01-01
  • 2012-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-28
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
相关资源
最近更新 更多