2011-03-01 58 views

回答

3

你不能。不過你可以使用std::vector

1

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

0

如果它只是一個數組,爲什麼不傳遞數組本身和它的大小作爲第二個參數? (通過將數組作爲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 

但你說數組已經創建之前提供給它的功能,沒有意義的使用引用。

+0

當您希望內存分配是確定性的時,您也可以使用在堆棧上分配的std :: vector。 – Nick 2011-03-01 16:02:38

相關問題