为什么这些循环给出相同的输出:
#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 0x61fdbc0x61fdb
结果是相同的,因为在第一个循环中,您将变量的值复制到新变量i
中并打印其值。(额外分配RAM(
在第二个循环中,通过将当前元素的地址分配给i
,可以从内存中访问该元素的值。(未分配额外RAM(
另一边:
cout<<&i<<" ";
导致打印CCD_ 3的地址。
与号运算符有很多用途。这两个是很难识别的,即声明中变量前面的&
(如int& i
(或int &i
,相同((和声明中未变量前面的&
,如cout << &i
。
试试这些,你会更好地理解。
for (auto i : ar)
cout << i << " "; // 2 3 4 // element of ar
for (auto &i : ar)
cout << i << " "; // 2 3 4 // element of ar
for (auto i : ar)
cout << &i << " "; // address of local variable i (probably same address)
for (auto &i: ar)
cout << &i << " "; // address of elements of ar (increasing addresses)