[英]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;
給您一個指向向量本身的指針,而不是任何特定元素的指針。
這是完全不同的兩件事。 i
和j
的類型完全不同且無關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.