【问题标题】:Why does vector's random access iterator gives the same memory address unlike pointers?为什么vector的随机访问迭代器给出的内存地址与指针不同?
【发布时间】:2020-10-23 18:11:52
【问题描述】:
vector<int>::iterator it;
for(it=v.begin();it<v.end();it++)
{
     cout <<&(it)<<" ";
     cout<<(*it)<<" ";
}

它输出:

0x7fff6667cdf0 7 0x7fff6667cdf0 14 0x7fff6667cdf0 15 0x7fff6667cdf0 16

注意地址每次都是一样的,问题是为什么?

【问题讨论】:

    标签: c++ pointers vector stl iterator


    【解决方案1】:

    你得到的是同一个对象it的地址,那么你每次都会得到相同的地址。迭代器指向的元素改变了,但迭代器本身的地址(it是一个对象,有自己的地址)不会改变。

    指针变量也一样,如果你要获取指针本身的地址。例如

    int* p;
    size_t s;
    for (p = v.data(), s = 0; s < v.size(); s++, p++)
    {
        cout <<&(p)<<" ";
        cout<<(*p)<<" ";
    }
    

    【讨论】:

    • 我不明白。 p 是递增的,为什么它是一样的?
    • @ProtoType 指针指向的地址发生变化,但指针本身的地址(指针是对象,有自己的地址)不会变化。
    • 哦!好的,是的,指针本身有它自己的地址,谢谢@songyunanyao
    猜你喜欢
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 2012-08-19
    相关资源
    最近更新 更多