c++ 关于对vector容器名直接取址的问题

想了解一下对容器名称直接取址得到的什么地址?

今天学《《 Essential C++ 》》时,书中尝试通过取得vector容器的首地址和尾地址实现对容器元素的遍历,其中首地址是通过&svec[0]得到的,立刻产生了用&svec是否可行的疑问。经过验证,发现 &svec[0] 和 &svec 取得的不是同一个地址,那&svec代表什么呢?

vector<int>v;

v.push_back(10);
v.push_back(20);

cout << &v << endl;
cout << &v[0] << endl;
cout << &v[1] << endl;

得到的结果

img

代表的是指针的地址,给你举个例子:
int arr[3] = { 1,5,6 };
int *p = arr;
那么你上面的就相当于问&p是啥,当然是指针p的地址。

直接输出v就是默认首地址,不用再取地址。

#include <iostream>
using namespace std;
int main() {
    int num[10];
    cout<<num<<endl;
    cout<<&num[0]<<endl;
    cout<<&num[1]<<endl;
    return 0;
}

img

分析下来,&v得到的地址,就和其它自定义数据类型的对象名取址的道理是一样的,得到的都是对象的首地址。这么看的话就一目了然了。
虽然vector容器表现出了array数组的一些性质,但本质还是一个对象,以对象的角度去看待v,更加贴切。
个人理解,如果有误请指正。