簡體   English   中英

為什么我的迭代器和指針沒有給出相同的地址?

[英]why my iterator and pointer not giving the same address?

我是C ++的新手。 我嘗試了begin迭代器,然后使用指針指向向量的第一個元素。 然后我打印它們的地址,它們是0x6efed8 0x6efedc

我讀過迭代器就像指針的抽象。 他們都指的是同一元素,所以我認為結果將是相同的。

為什么它們不同?

如果代碼中有問題,那么也請弄清楚。

 vector<int> data{10,20,30};
    auto i = data.begin();
    auto* j = &data;
    cout << &i << " " << j << endl;

讓我們重寫一下代碼:

struct foo { 
    int bar() { return 1; }
};

int main() {
    foo data;
    auto i = data.bar();
    auto* j = &data;
    std::cout << &i << " " << j;
}

i是返回的任何data.bar()的副本。 它是不同類型的不同對象,以不同的內存地址存儲。 (...如果您將foo替換為std::vector<int> ,那么一切都不會改變)

PS:請注意, &data不是指向第一個元素的指針,而是&data[0] ,這是另一個地址,因為第一個元素與向量本身或從迭代器到第一個元素都不相同。

這里:

 vector<int> data{10,20,30};
 auto i = data.begin();

begin()函數返回一個迭代器,該迭代器引用向量的第一個數據元素-即包含10的元素

而:

 auto* j = &data;

給您一個指向向量本身的指針,而不是任何特定元素的指針。

這是完全不同的兩件事。 ij的類型完全不同且無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM