【问题标题】:Pointers to array differ in STL vs regular for loops指向数组的指针在 STL 与常规 for 循环中不同
【发布时间】:2012-11-22 05:27:04
【问题描述】:

我有两个循环依次遍历大约 20 个布尔值的数组并打印每个布尔值的内存地址:

for (int i = 0; i < 20; ++i) {
    printf("%p\n", &_boolArray[i]);
}
for (bool b : _boolArray) {
    b = true;
    printf("%p\n", &b);
}

我希望两个数组的输出完全相同。我得到的是一些不同的东西:

0x102eeefb0
0x102eeefb1
0x102eeefb2
0x102eeefb3
0x102eeefb4
0x102eeefb5
...
0x7fff5ce8b9bf
0x7fff5ce8b9bf
0x7fff5ce8b9bf
0x7fff5ce8b9bf
0x7fff5ce8b9bf

我知道有更好的方法来填充数组(std::fill for one),但我仍然想知道为什么会这样。

【问题讨论】:

    标签: c++ arrays pointers for-loop foreach


    【解决方案1】:

    你每次都在第二个for循环中复制b,应该通过引用传递

     for (bool &b : _boolArray) {
           //  ^^^ reference to original element
        b = true;
        printf("%p\n", &b);
    }
    

    【讨论】:

      【解决方案2】:

      第二个 for 循环将数组值复制到位于另一个位置(常量)的 b,这就是您的输出看起来像这样的原因

      你想做对的事

      for(bool &b:_boolArray)
      {
        printf("%p\n",b);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-21
        • 2018-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-27
        相关资源
        最近更新 更多