[英]Passing a pointer to a vector
我正在探索一個 c++ 庫,但無法弄清楚為什么它的示例是按原樣編寫的。 在示例中,他們執行以下操作
std::vector<unsigned int> vec(count);
someFunc(&vec[0]);
而函數定義為
void someFunc(unsigned int* a);
為什么示例傳遞對向量的第一個元素而不是整個向量的引用。 inst這段代碼一樣嗎?
someFunc(&vec);
編輯:我應該提供更多的上下文。 我簡化了案例,但事實證明這是一個錯誤的決定。 function 應該簡化網格,vec 是網格所有索引的列表。 大概在代碼中的某個地方,指針用於迭代索引的 rest?
他們編寫示例的原因是someFunc()
采用unsigned int*
類型(指向 unsigned int 的指針)。 他們稱之為的原因是:
someFunc(&vec[0]);
並不是
someFunc(&vec);
是因為std::vector
不像 C 風格的數組(比如unsigned int arr[]
),其中arr
可以將unsigned int*
歸結為數組中的第一個元素,而是充當類/結構您訪問std::vector
接口的一些動態 memory 的資源句柄。 Thus, like any class in C++, calling foo(&A)
(where A
is some class instance/object) would return a pointer to the object itself [1].
在他們的示例中,他們訪問了vec
的第一個元素,就像一個 C 風格的數組(使用重載的operator[]
),它是一個引用。 然后他們使用 C 風格的一元前綴 & 運算符(帶有簽名&A
)來訪問通過索引運算符獲得的值的地址。
如果他們使用std::vector::data()
返回指向向量擁有的 memory 的起始地址的指針或使用std::addressof()
(盡管后者可能很冗長),則示例可能會更清楚。
someFunc(vec.data());
/// or ...
someFunc(std::addressof(vec[0]));
[1] 注意:如果所討論的類/結構重載了&
運算符以使其行為不同,則情況可能並非如此。 std::vector
在這種情況下不會。
庫 function someFunc 很可能是用 C 風格的數組作為參數編寫的,即您只需傳遞指向第一個元素的指針(而不是引用)。 鍵入指針后,可以通過 function 計算下一個元素的地址。 但是他們的號碼必須以其他方式知道。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.