C++ 将指针从一个向量复制到另一个向量;地址指向变化?
我有一个指向int的指针向量。我喜欢把这些指针复制到另一个向量。但是,地址将不同。为什么,在这种情况下,我必须如何使用*、&、const和auto?请注意,这不是关于智能指针的问题C++ 将指针从一个向量复制到另一个向量;地址指向变化?,c++,pointers,vector,C++,Pointers,Vector,我有一个指向int的指针向量。我喜欢把这些指针复制到另一个向量。但是,地址将不同。为什么,在这种情况下,我必须如何使用*、&、const和auto?请注意,这不是关于智能指针的问题 #include <iostream> #include <vector> using namespace std; int main() { vector<int*> v; v.emplace_back(new int(5)); v.emplace_b
#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;
}
编辑:
将cout行更改为:
cout<<"&v"<<i<<"="<<&*(v.at(i))<<" &g"<<i<<"="<<&*(g.at(i))<<endl; //will not print the same address
您正在打印指针的地址。相反,您希望看到指针的值。取而代之的是
cout<<"v"<<i<<"="<<(v.at(i))<<" g"<<i<<"="<<(g.at(i))<<endl;
cout这个评论完全错误:
v
中没有任何整数,只有指向整数的指针
因此g
没有指向v
中整数的指针,它的指针与v
然后,当您打印出这些值时,您使用的&(v.at(i))
是错误的。首先,您可以编写&v.at(i)
,而不使用无用的括号,但更重要的是,您不是在打印存储的指针,而是在打印它们的地址
要打印存储的指针,只需使用v.at(i)
,这将为两个向量提供相同的值,因为您将值从一个复制到另一个
&*(v.at(i))
是愚蠢的、完全多余的。这与v.at(i)
打印指针的地址相同。为什么你关心向量内部存储的对象的地址是什么?我不是100%确定,但我认为你可能打印的是指针的地址,而不是指针指向的地址。。。。在研究了你的代码之后,我明白了你的意思是“地址不一样,当我期望它们是一样的”&*(v.at(I))
是可爱的模糊:)只要写v.at(I)
@dani指针的值(你的第I个元素)就是它指向的地方。如果p
是指针,&*p==p
。
&v0=0x2203010 &g0=0x2203010
&v1=0x2203050 &g1=0x2203050
cout<<"v"<<i<<"="<<(v.at(i))<<" g"<<i<<"="<<(g.at(i))<<endl;
//copy all pointers to g; g shall have pointers to the int's in v