[英]Passing array to function C++
關於C ++中數組的傳遞,我有一個簡單的問題,我不明白。
基本上,當您要將整數類型的數組傳遞給另一個函數時,必須將地址傳遞給該數組,而不是直接傳遞整個連續內存塊。 到底為什么呢?
另外,為什么可以將char數組直接傳遞給C ++中的另一個函數而無需傳遞地址呢?
我曾嘗試在此網上尋找學習資料(例如cplusplus.com),但沒有設法找到並解釋。
丹,謝謝您的時間。
只要考慮到C ++,傳遞char arrays
和int arrays
是相同的。
有兩種在c ++中傳遞數組的方法。
地址已通過
int fn(int *arrays, int len);
int fn(int arrays[], int len); // Similar to above, still staying as sytax hangover from anci c
數組引用被傳遞
int fn(int (&array)[SIZE]); // Actual array passed as reference
您可以將以上功能模板化為
template<size_t SIZE>
int fn(int (&array)[SIZE]);
上面的方法允許您將任意大小的數組傳遞給此函數。 但是請注意,每種尺寸的模板都會創建不同的功能。 如果函數的副作用更改了局部狀態(例如ex的靜態變量),則應謹慎使用。
如果您不想更改內容,請在參數中使用const
。
如果要在函數參數中復制數組,請考慮使用stl容器(如std::array
或std::vector
或在您的類中嵌入數組。
從您的問題中還不能完全清楚您正在嘗試什么以及遇到了什么問題,但是無論如何我都會盡力為您提供有用的答案。
首先,您所討論的可能是int[]
或int*
(或其他類型),它本身不是數組……它是指向內存塊的指針,可以像訪問內存一樣數組。 因為您所擁有的只是一個指針,所以該數組必須通過引用傳遞。
其次,將數組作為“連續內存的整個塊”傳遞是相當低效的……傳遞該點可能只涉及移動32或64位值。 對於內存緩沖區,按引用傳遞通常是明智之舉,如果需要,可以顯式使用memcpy
功能來復制數據。
第三,我不理解您對char數組“直接”可傳遞的含義,但其他類型的數組則不能。 當傳遞或存儲char數組時,沒有什么神奇的……它們就像其他數組一樣。 原則上的區別在於,編譯器允許您使用字符串文字來創建char數組。
最后,如果您使用的是C ++ 11,則可能需要考慮新的std::array<T>
類。 它提供了各種方便的功能,包括自動內存管理和跟蹤其自身大小。 您可以根據需要通過template<class T> void foo(std::array<T> bar)
或引用template<class T> void foo(std::array<T>& bar)
傳遞這些值。
您不能按值傳遞任何數組。 您可以通過值傳遞包含C ++ 11的數組或std::array
的結構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.