簡體   English   中英

將指針傳遞給向量

[英]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.

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