为什么 C++ 地址中的矢量无法通过原始指针访问

why vector in c++ address cannot access by raw pointer

本文关键字:原始 访问 指针 地址 C++ 为什么      更新时间:2023-10-16

>当我每次写作时使用向量时

vector<int>::iterator itr;

但是当我想使用原始指针访问地址时,例如

int *ptr=v.begin();

它不打印任何内容并显示错误 如果我想用迭代器和原始指针变量打印地址 它不打印任何地址 但是如果我们想像这样使用 V[i] 访问它工作正常 我的问题是为什么这个原始指针不保存这个容器初学者地址

据我了解,您想要指向向量中第一个元素的指针:

vector<int>::iterator itr = v.begin();
// if(itr != v.end()) // should be involved
int* ptr = &*itr;

或:

// if(v.size()) // should be involved
int* ptr = &v[0]; // all C++ versions
int* ptr = v.data(); // C++11 and later
int *ptr=v.begin();

您通常不能这样做。std::vector::begin返回一个std::vector::iterator,不能保证可转换为int*。即使在碰巧可兑换的情况下,也无法保证转换后的价值是多少。

如果你想要的是向量的第一个元素的地址,你可以使用data成员函数:

int *ptr = v.data();