使用C返回数组

我对C比较陌生,我需要一些处理数组的方法的帮助。来自Java编程,我习惯于说int[]method(),以便返回数组。然而,我发现使用C时,在返回数组时必须使用数组指针。作为一个新的程序员,我真的一点也不理解这一点,即使我浏览了很多论坛

基本上,我正在尝试编写一个方法,用C语言返回一个char数组。我将为该方法(我们称之为returnArray)提供一个数组。它将从以前的数组创建一个新数组,并返回指向该数组的指针。我只是需要一些关于如何开始这方面的帮助,以及如何在指针被发送出数组后读取指针。任何解释这一点的帮助都将不胜感激

数组返回函数的建议代码格式

char*returnArray(char数组[]){
返回字符[10];
//方法从数组中提取值,解释它们,然后创建新数组
return&(returned[0]);//这是否正确?
} 

函数的调用方

int main(){
int i=0;
字符数组[]={1,0,0,0,1,1};
字符数组计数=0;
char*returnedArray=returnArray(&arrayCount);///这是否正确?
对于(i=0;i<10;i++)
printf(%d,,,returnedArray[i]);//格式是否正确?
}

我还没有对此进行测试,因为我的C编译器目前不工作,但我想弄清楚这一点

不能从C中的函数返回数组。也不能(不应该)执行以下操作:

char*returnArray(char数组[]){
返回字符[10];
//方法从数组中提取值,解释它们,然后创建新数组
return&(returned[0]);//这是否正确?
} 

返回的是使用自动存储持续时间创建的,一旦它离开其声明范围,即当函数返回时,对它的引用将变得无效

您需要动态分配函数内部的内存,或者填充调用者提供的预分配缓冲区

选项1:

动态分配函数内部的内存(负责解除分配的调用方ret

char*foo(整数计数){
char*ret=malloc(计数);
如果(!ret)
返回NULL;
对于(int i=0;i<count;++i)
ret[i]=i;
返回ret;
}

这样说吧:

int main(){
char*p=foo(10);
如果(p){
//用p做东西
自由基(p);
}
返回0;
}

选项2:

填充调用者提供的预分配缓冲区(调用者分配buf并传递给函数)

void foo(字符*buf,整数计数){
对于(int i=0;i<count;++i)
buf[i]=i;
}

这样称呼它:

int main(){
char arr[10]={0};
foo(arr,10);
//不需要取消分配,因为我们已分配
//具有自动存储持续时间的arr。
//如果我们已经动态地分配了它
//(即malloc或某种变体)然后我们
//需要免费通话(arr)
}

发表评论