數組默認通過ref或value傳遞數組嗎? 謝謝。數組如何傳遞?
Q
數組如何傳遞?
19
A
回答
27
它們作爲指針傳遞。這意味着關於數組大小的所有信息都將丟失。您最好建議使用std :: vectors,它可以按照您的選擇通過值或引用傳遞,因此保留所有信息。
下面是一個將數組傳遞給函數的示例。注意,我們必須明確指定元素的數量,因爲sizeof(p)會給出指針的大小。
int add(int * p, int n) {
int total = 0;
for (int i = 0; i < n; i++) {
total += p[i];
}
return total;
}
int main() {
int a[] = { 1, 7, 42 };
int n = add(a, 3);
}
5
數組是特殊的:它們總是作爲指針傳遞給數組的第一個元素。
23
首先,您不能在數組副本的意義上按值傳遞數組。如果您需要該功能,請使用std::vector
或boost::array
。
通常情況下,通過值傳遞指向第一個元素的指針。該過程中數組的大小會丟失,並且必須單獨傳遞。下面的簽名都是相同的:
void by_pointer(int *p, int size);
void by_pointer(int p[], int size);
void by_pointer(int p[7], int size); // the 7 is ignored in this context!
如果你想通過引用傳遞,大小類型的一部分:
void by_reference(int (&a)[7]); // only arrays of size 7 can be passed here!
你經常用的模板參考合併過程,這樣你就可以使用具有不同靜態已知尺寸的功能:
template<size_t size>
void by_reference(int (&a)[size]);
希望這會有所幫助。
相關問題
- 1. 如何傳遞數組?
- 2. 你如何傳遞數組?
- 3. 如何傳遞數組值?
- 4. 如何在參數中傳遞數組
- 5. 如何傳遞數組作爲參數?
- 6. 如何傳遞兩個數組參數
- 7. 如何將數組傳遞給AppDelegate.m?
- 8. 如何傳遞數組索引
- 9. 如何將Go數組傳遞給C?
- 10. 如何傳遞聯合數組c
- 11. 如何將數組傳遞給Sinatra?
- 12. 如何正確傳遞JSON數組?
- 13. 如何傳遞組件中的參數?
- 14. 如何將數組傳遞給方法?
- 15. 如何在voldemort中傳遞sting數組
- 16. 如何在http頭中傳遞數組?
- 17. 如何將數組傳遞給方法?
- 18. 如何將package.json數組傳遞給grunt.js
- 19. 如何在javascript中傳遞數組值
- 20. 如何從庫中傳遞數組c
- 21. 如何將數組傳遞給json
- 22. 如何通過ajax傳遞數組?
- 23. 如何通過HiddenType傳遞數組?
- 24. 如何將PHP數組傳遞給jQuery?
- 25. 在Nancyfx中如何傳遞數組Ids
- 26. 如何通過引用傳遞數組?
- 27. 如何將數組傳遞到getElementByID
- 28. 如何在OOP PHP中傳遞數組?
- 29. 如何在Qt中傳遞數組?
- 30. 如何將數組傳遞給JqCloud?
感謝Neil,但正如我在昨天的一篇文章中提到的,我目前正在從TC++ PL開發excersizes,並且我必須使用oridinary數組。我只是想知道是否有必要寫下如下內容:void f(int(&a)[size]);還是僅僅將它聲明爲不帶ref的數組就足夠了。 – 2010-04-01 11:12:33
因此,通過這個答案判斷他們傳遞的值是一個指針的大小。我對嗎? – 2010-04-01 11:14:01
@atch從TC++ PL,恕我直言,不從C++學習的好理由。 – 2010-04-01 11:14:22