簡體   English   中英

如何將對數組的引用作為函數參數傳遞給數組,數組的大小僅在運行時才知道?

[英]How do I pass a reference to an array, whose size is only known at run-time, as a function parameter?

我有一個根據用戶輸入動態創建的數組,我需要將該數組傳遞給一個函數,在該函數中對其進行操作,然后將結果傳遞回原始數組。 當我嘗試使用

void MyFunction(int (&MyArray)[])

我的編譯器抱怨它不知道數組有多大。

你不能 您可以使用std::vector

您可以提供一個指向數組第一個元素的指針+一個保存數組大小的第二個參數。

如果它只是一個數組,為什么不將數組本身及其大小作為第二個參數傳遞呢? (通過將數組作為int*int[]傳遞,就C ++而言是相同的)。 由於包含數組的變量的值只是指向數組第一個元素的指針,因此您不會通過復制數組的內容而最終終止運行時,而只是一個盡可能小的指針在這種情況下。

void MyFunction( int MyArray[], int size ) { /* edit the array */ }
int main() {
    // read nrElements
    // ...

    // create the array
    int *a = new int[nrElements];
    // populate it with data
    // ...
    // and then
    MyFunction(a, nrElements);
}

僅在要在函數中調整數組大小(例如,向其中添加新元素)時,才應使用std::vector ,但否則可以堅持使用此方法,因為它更快。

順便說一句,您唯一需要引用數組的情況是您想更改調用函數時傳遞的變量的值,例如,使其指向另一個數組。 像:

void createMyArray(int* &array, int nrElements) {
    array = new int[nrElements];
    for (int i = 0; i < nrElements; ++i) {
        array[i] = 0;
    }
}

int *a = (int []) {1, 2, 3};
std::cout << a[0] << std::endl; // prints 1
createMyArray(a, 10);
// now  a  points to the first element of a 10-element array
std::cout << a[0] << std::endl; // prints 0

但是您說過,在將數組提供給函數之前已經創建了數組,使用引用沒有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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