簡體   English   中英

將數組傳遞給函數C ++

[英]Passing array to function C++

關於C ++中數組的傳遞,我有一個簡單的問題,我不明白。

基本上,當您要將整數類型的數組傳遞給另一個函數時,必須將地址傳遞給該數組,而不是直接傳遞整個連續內存塊。 到底為什么呢?

另外,為什么可以將char數組直接傳遞給C ++中的另一個函數而無需傳遞地址呢?

我曾嘗試在此網上尋找學習資料(例如cplusplus.com),但沒有設法找到並解釋。

丹,謝謝您的時間。

只要考慮到C ++,傳遞char arraysint 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::arraystd::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.

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