2012-07-25 29 views
3

有沒有什麼辦法可以C#傳遞數組的功能像C + +?像C++一樣的C#數組傳遞函數?

在C++中,我們可以通過陣列加偏移和長度很整齊像下面

void myFunction(int A[], int m) // m is length of A 
{ 
    myFunction2(A+1, m - 1); 
} 

C#可以做到這一點?

回答

6

當然。但是你不能修改指針,所以你需要單獨傳遞偏移量。此外,您不需要傳遞長度,因爲所有C#數組都有一個.Length屬性來獲取數組大小。

void MyFunction(int[] A, int offset) 
{ 
    MyFunction2(A, offset + 1); 
} 
+0

你編輯了你的答案,所以我只保留我的評論的第二部分:在許多情況下,你實際上可以找到C中數組的長度和C++通過使用'sizeof(array)/ sizeof(array_type)';你只需要小心,你沒有使用常規指針而不是數組,因爲在那種情況下它會失敗(因爲它只會給你指針的大小),而且__ will_必須以實際長度傳遞代替。 – JAB 2012-07-25 17:34:48

+0

還有另一種情況,我需要A []的上面部分,如A [0]〜A [A.Length/2]。在C++中,我們可以執行MyFunction2(A,m/2 + 1)。我們如何在C#中做到這一點? – etlds 2012-07-25 18:18:07

+0

@DeshengLi:您將在C#中傳遞相同的有效長度,例如'void MyFunction(int [] A,int maxIndex)' – mellamokb 2012-07-25 18:20:06

0

在C#中,您沒有傳遞指向數組的指針,而是傳入數組引用。

void myFunction(int[] array, int offset) 
{ 
    myFunction(array, offset + 1); 
} 

這將有效地做同樣的事情。重要的是要知道長度是不必要的,因爲數組本身是一個攜帶數組長度的對象引用。所以你的實際長度可以通過你的例子得到array.Length - offset