C++ vector.begin()和vector [0]

Per*_*kie 0 c++ vector

为什么这两行打印不同的地址?

vector<int> v1{ 12,2,34 };
printf_s("%d -  0x%p\n", v1[0], &v1[0]);
printf_s("%d -  0x%p\n",*v1.begin(), v1.begin());
Run Code Online (Sandbox Code Playgroud)

此地址中的值相同,但地址本身不同.这是否意味着同一个数组有两个副本?

编辑:在调试模式下它打印不同的地址,在发布模式下有相同的地址:)

Vit*_*meo 10

v1.begin()返回一个std::vector<int>::iterator,不一定是地址v1[0].事实上,尝试使用它打印出来printf给我一个警告:

警告:格式'%p'需要'void*'类型参数,但参数3的类型为'std :: vector :: iterator`

除非您确定在您的特定标准库实现中并且当前的编译选项std::vector<int>::iterator是别名int*,否则这种比较毫无意义.