我有一个指向int的指针。我喜欢将这些指针复制到另一个向量。但是,地址不一样。为什么,在这种情况下我如何使用*,&,const和auto?请注意,这不是关于智能指针的问题。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int*> v;
v.emplace_back(new int(5));
v.emplace_back(new int(20));
//copy all pointers to g; g shall have pointers to the int's in v
vector<int*> g;
for(const auto& i : v)
g.emplace_back(i);
//print all addresses
for(int i(0); i<2; ++i)
cout<<"&v"<<i<<"="<<&(v.at(i))<<" &g"<<i<<"="<<&(g.at(i))<<endl; //will not print the same address
return 0;
}
输出结果为:
&v0=0x7bb070 &g0=0x7bb090
&v1=0x7bb078 &g1=0x7bb098
编辑: 将cout行更改为:
cout<<"&v"<<i<<"="<<&*(v.at(i))<<" &g"<<i<<"="<<&*(g.at(i))<<endl; //will not print the same address
输出看起来更好:D,谢谢:
&v0=0x2203010 &g0=0x2203010
&v1=0x2203050 &g1=0x2203050
答案 0 :(得分:3)
您正在打印指针的地址。相反,你想看到指针的值。而是做
cout<<"v"<<i<<"="<<(v.at(i))<<" g"<<i<<"="<<(g.at(i))<<endl;
答案 1 :(得分:2)
这条评论是完全错误的:
//copy all pointers to g; g shall have pointers to the int's in v
v
中没有任何整数,只有指向整数的指针!
所以g
没有指向v
中与<{1>}具有相同指针的整数的指针
然后当您打印出值时,使用v
这是错误的。首先,您可以在没有无用括号的情况下编写&(v.at(i))
,但更重要的是,您不会打印存储的指针,而是打印它们的地址。
要打印存储的指针,只需使用&v.at(i)
,这将为两个向量提供相同的值,因为您将值从一个复制到另一个。
v.at(i)
只是愚蠢而且完全是多余的。它与&*(v.at(i))