首页 > 解决方案 > 在 foreach 循环中将变量声明为 i vs &i

问题描述

为什么这些循环给出相同的输出:

#include<iostream>
#include<vector>
using namespace std;
int main()
{
    vector<int> ar = {2, 3 ,4};
    for(auto i: ar) //this line changes in the next loop
        cout<<i<<" ";

    cout<<"\n";

    for(auto &i: ar) //i changed to &i
        cout<<i<<" ";
}

它们都给出相同的输出:

2 3 4

2 3 4

在声明 foreach 循环变量时,不应添加 & 使变量获取数组中值的引用,并打印 i 使其打印引用。这里发生了什么?

通过打印参考我的意思是这样的代码打印:

for(auto i: ar)
    cout<<&i<<" ";

输出:

0x61fdbc 0x61fdbc 0x61fdb

标签: c++loopsfor-loopforeachampersand

解决方案


结果是相同的,因为在第一个循环中,您将变量的值复制到一个新变量中i并打印它的值。(分配了额外的 RAM)

在第二个循环中,您通过将其地址分配给 来访问内存中当前元素的值i。(没有分配额外的 RAM)

另一方面:

cout<<&i<<" ";

导致打印 的地址i


推荐阅读