为什么这两行打印不同的地址?
vector<int> v1{ 12,2,34 };
printf_s("%d - 0x%pn", v1[0], &v1[0]);
printf_s("%d - 0x%pn",*v1.begin(), v1.begin());
此地址中的值相同,但地址本身不同。这是否意味着同一数组有两个副本?
编辑:在调试模式下,它打印不同的地址,在发布模式下,有相同的地址:)
v1.begin()
返回一个std::vector<int>::iterator
,这不一定是v1[0]
的地址。事实上,尝试使用 printf
打印出来会给我一个警告:
警告:格式">%p"需要类型为">void*"的参数,但参数 3 的类型为"std::vector::iterator">
除非您确定在您的特定标准库实现和当前编译选项中std::vector<int>::iterator
是 int*
的别名,否则比较是没有意义的。
对于矢量对象 v1:
&V[0]
是对象 v1 的第一个元素的地址。
例如,当我们创建一个迭代器时vector<>::iterator iter
iter
本身是另一个对象,如本文档中所述。
迭代器:一个类似指针的对象,可以用++递增, 用 * 取消引用,并使用 != 与另一个迭代器进行比较。
我希望这本参考手册能详细回答您的问题。