将指针从一个向量复制到另一个向量;地址指出了变化
Copy pointers from one vector to another; the adress pointed to changes?
我有一个指向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
您正在打印指针的地址。相反,您希望查看指针的值。而是做
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
v
中没有任何ints,只有指向ints的指针!
因此,g
没有指向 int 的指针,v
它具有与 v
相同的指针
然后,当您打印出值时,您使用&(v.at(i))
这是错误的。首先,你可以只写&v.at(i)
没有无用的括号,但更重要的是,你不是打印你存储的指针,而是打印它们的地址。
要打印您存储的指针,只需使用 v.at(i)
它将为两个向量提供相同的值,因为您将值从一个复制到另一个向量。
&*(v.at(i))
只是愚蠢的,完全是多余的。它和v.at(i)
一样
相关文章:
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- C++ 将地址保存为字符串的向量转换为新的向量
- 指向结构的指针向量的元素具有相同的地址
- 为什么迭代向量在 c++ 中给出固定地址?
- 获取向量中元素的地址
- pthread_mutex_t向量为所有互斥锁提供了相同的地址
- 类对象指针的向量:如何在指针地址获得价值?C 和SDL_RECT
- 循环向量引起的地址边界错误
- 在向量 (C++) 中保留插入元素的地址
- 在 c++ 中按地址传递向量
- 尝试将派生类对象地址分配给基类指针的向量
- 获取数组/向量末尾地址的未定义行为
- 获取 STL 向量C++的地址
- 将二进制文件读取到向量元素的地址中
- C 方法地址向量
- 是否可以在结构构造中将self的地址推送到向量
- 将对象的地址推送到向量后更改对象
- 将指针从一个向量复制到另一个向量;地址指出了变化
- 将对象的地址添加到循环中的向量中
- 类型类的向量(地址簿程序)