我对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)
}