c++范围for语句中循环变量的地址问题

在使用c++容器的时候,范围for语句是最基本的操作,但是在使用范围for语句的时候,有一个小问题不知道大家有没有注意到:

#include<iostream>
#include<vector>
#include<string>
using namespace std;

vector<string> svec{"hello", "world", "hi"};

for(auto s:svec) //第一种情况,s前面不加引用&
{
	cout << &s <<endl; //尝试输出容器中每个变量的地址
}
VS2015环境运行结果如下图1:

for(auto &s:svec) //第二种情况,引用s
{	
	cout << &s << endl;//同上,尝试输出容器中每个元素的地址
}
运行结果如下图2:

综上:在范围for语句中,循环变量不使用引用的时候,
每次读取容器中元素的副本存到该循环变量中,
因此输出的地址为该循环变量的地址,
自然是不变的。当循环变量使用引用的时候,
每次传递给循环变量的是容器中元素的地址,
所以,如果想要获得容器中各个元素的地址,
 请把范围for语句的循环变量设置为引用,这样每次都能获取到不同元素的地址。

图1
图1

图2
图2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值