2015-06-14 120 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你不能直接从函数返回一个数组。你可以返回一个包含数组的结构。 –