假设我们有一个向量v,并将其传递给函数f。
void f(vector<int> &v) {
cout<<&v;
}
int main() {
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
cout<<&v[0]<<"\n"<<&v<<"\n";
f(v);
}
我得到的输出如下:
0x55c757b81300
0x7ffded6b8c70
0x7ffded6b8c70
我们可以看到
&v
和&v[0]
有不同的地址。那么v是指向向量开头的指针吗?如果是,为什么我无法访问*v
?这里是否有错误?谢谢。
vector
是一个模板,vector<int>
是一个类,而v[0]
则是一个int
。实现中是否使用指针是内部细节,未记录且不可依赖。你为什么要关心呢?最后两行打印相同地址是预期的,并且对于所有引用类型参数都是一样的。 - dxivstd::vector
类型的使用方法,建议查阅C++标准、好的书籍或者cppreference.com等资料。如果你很好奇,也可以尝试阅读std::vector
模板的源代码,不过这对初学者来说可能有一些难度。作为一个新用户,在这里请从[tour]入手,并阅读[ask]。 - Ulrich Eckhardtint *p = v.data(); cout<<p<<" "<<&v[0]
会得到相同的结果。&v
是 vector 对象的地址,而&v[0]
是底层数组的地址。 - Ch3steR