请问std::cout << &i << 打印的是i的地址还是num容器中元素的地址?
范围for循环中引用地址的打印结果说明
打印的是容器num中对应元素的地址,而非引用i自身的地址。
在C++中,引用本质是目标变量的别名,它不会占用独立的内存空间(编译器会直接将引用关联到绑定的对象)。当对引用i执行&i取地址操作时,编译器会直接返回该引用所绑定的容器元素的内存地址。
你可以通过对比验证:在代码中直接打印容器元素的地址,会和范围for循环里&i的输出完全一致。比如补充如下测试代码:
#include <iostream> #include <vector> int main () { std::vector<int> num {1, 2, 3}; // 直接打印容器元素的地址 std::cout << "容器元素地址:\n"; for (size_t idx = 0; idx < num.size(); ++idx) { std::cout << &num[idx] << "\n"; } // 范围for循环打印引用的地址 std::cout << "\n引用i的地址:\n"; for (const int &i : num) { std::cout << &i <<"\n"; } }
运行后两组地址会完全匹配,这就证明了&i获取的是容器中对应元素的地址。
内容的提问来源于stack exchange,提问作者user25173387
相关产品推荐
相关产品推荐

