2015-06-14 200 views
1

我有一個關於數組和函數C.C數組和函數,如何返回?

一個新手的問​​題

比方說,我有這樣的數組:

int array1[10] = {2,4,6,3,2,3,6,7,9,1}; 

我寫了這個功能:

int *reverseArray(int *array, int size) 
{ 
    int *arr = malloc(size * sizeof(int)); 
    int i, j; 

    for(i = 10, j = 0; i > 0; i--, i++) { 
     arr[j] = array[i]; 
    } 

    return arr; 
} 

我甚至不知道如果它的工作,因爲如果我這樣做:

array1 = reverseArray(array1, 10); 

我得到了錯誤:

分配與數組類型的表達式

如何分配一個陣列到另一個陣列的ADRESS?

+0

是的,我爲J,是一個錯字,謝謝人 – Carondimonio

回答

2

該功能是正確的*,它工作正常。問題是,你不能指定一個這樣的數組:

array1 = reverseArray(array1, 10); 

reverseArray返回一個指針,所以你應該把它分配給一個指針變量:

int* reversedArray1 = reverseArray(array1, 10); 

如果你想將數據放置回在array1,使用memcpy

memcpy(array1, reversedArray1, sizeof(array1)); 
free(reversedArray1); 

注意,因爲你的函數使用malloc分配其返回值,T調用者在完成該操作後需要釋放該內存。您需要調用free(reversedArray1)以確保分配的數組不會產生內存泄漏。

*for環頭使用size-1到位的10,因爲你是無論如何傳遞,並允許i達到零:

for(i = size-1, j = 0; i >= 0; i--, j++) 
+0

我以爲一個數組只是一個指向第一個元素的指針。好了,現在可以工作。 由於ponters和數組是如此不同,有沒有辦法從函數返回一個數組? – Carondimonio

+0

@Carondimonio當你將數組傳遞給一個函數或者將其賦給一個指針變量時,數組就變成了指向初始元素的指針。在其他情況下,數組是一個數組,而不是指針。但是,隱式轉換爲指針使得這種區別比較模糊。 – dasblinkenlight

+0

@Carondimonio你不能直接從函數返回一個數組。你可以返回一個包含數組的結構。 –