在C中如何使函数返回数组

如题所述

Java语言的函数可以轻易的返回一个数组,而C/C++却不能直接返回一个数组。这是由于在C/C++中,数组不是一种类型,因此不能被直接返回。
在C/C++中,一般有两种方法来返回一个数组。
第一种方法:
返回一个指向数组的指针,例如char (*retArray)[10]声明了一个函数retArray,该函数可以返回指向具有10个char元素的数组例子如下:#include <stdio.h
#include <stdlib.h
int (*retArray())[10]{int (*a)[10];int i=0;/*动态开辟空间*/
a=calloc(10,sizeof(int));/*赋值*/for(i=0;i<10;i++){(*a)[i]=i;}return a;}int main(){int (*b)[10];
/*函数返回指向数组的指针*/
b=retArray();
/*打印第一个元素*/
printf("%d
",(*b)[0]);
/*释放空间*/free(b);return 0;}第二种方法:
如果你不喜欢用指针的形式返回数组,那么可以采用返回一个结构的形式。这种形式相对较安全,可以避免忘记释放指针而造成内存泄露,
也可以避免访问悬挂指针造成的错误。但缺点是由于结构是先拷贝再返回,因此如果结构较大时,会影响效率和占用较大内存。
例子如下:#include <stdio.h
typedef struct{int a[10];}RETA;RETA retArray(){RETA x;int i=0;for(i=0;i<10;i++)
x.a[i]=i;return x;}int main(){int b[10];b=retArray().a;
printf("%d
",b[5]);
/**或者这样调用
RETA y=retArray();
printf("%d
",y.a[3]);**/return 0;}注意:(1) 在返回指针时要切记要避免内存泄露和访问悬挂指针
(2) 很多人认为指针和数组等价的,这是错误的。int (*a)[10]和int b[10]两者是不能直接用a=b来赋值的。在数组和指针作为函数参数传递时,二者可以认为等价,这是因为数组会被转化为指针来传递。
(3) 返回多维数组方法类似。
温馨提示:内容为网友见解,仅供参考
无其他回答

怎么使C语言的函数返回值为一个数组
\/\/ 方法1,用静态变量进行返回 char *SubFunction(void){ static char szText[5] = "adfa"; \/\/ 用静态空间 \/\/对p进行赋值操作 return szText;} void Caller() \/\/ 这个函数调用SubFunction { TRACE("%s\\n", SubFunction);} \/\/ 方法2,用指针传递 void SubFunction(char *pText1, char *p...

c语言中函数能返回一个数组吗
方法:以指针方式传递该一维数组的地址,然后把数组的最大值与数组的第一个元素交换,把数组的最小值与最后一个元素交换。函数被调用完毕后,实参数组中的第一元素为数组的最大值,实参数组中最后一个元素为数组的最小值,从而实现返回数组的最大值与最小值的功能。程序参考代码如下:include "stdio.h...

在C中如何使函数返回数组
返回一个指向数组的指针,例如char (*retArray)[10]声明了一个函数retArray,该函数可以返回指向具有10个char元素的数组例子如下:#include <stdio.h include <stdlib.h int (*retArray())[10]{int (*a)[10];int i=0;\/*动态开辟空间*\/ a=calloc(10,sizeof(int));\/*赋值*\/for(i=0;i<...

C语言函数如何return数组?
数组在作为函数返回值或者函数参数时,实际上只作为指针来返回或者传递的。因此返回值用指针数据类型。比如下面的代码:int g_a[4] = {1,2,3,4};int * retn_arrary() \/\/返回值用指针类型即要。{return g_a; }

C语言函数中怎么返回一个二维数组
1、我们首先定义一个二级指针和一个行列变量[int ** array,row,column;]。2、然后我们编写进入行和列的语句,代码如图所示。3、接下来我们可以用一维数组打开一维一维数组。4、接下来,我们使用[array [i] =(int *)malloc(sizeof(int)* column);]来为数组再次生成包含该数组的新数组。5、...

c语言中怎样返回一个数组?
在C语言中,无法直接返回一个数组,但是可以通过返回对应类型指针的方式,返回数组。在大多数情况下,一维数组和一维指针是可以通用的。比如,定义一个函数,申请一定长度的整型动态数组,其长度用参数传入,并将结果返回。如出错,返回空指针NULL。 代码可以写成如下形式:int *int_array_create(int n)\/\/...

C语言中如何从函数中返回一个数组
不能返回数组,可以反回数组的首地址,也就是返回指针 至于数组的大小可以设置一个输出型变量指针,在调用函数的时候传到函数里,做一下记录.

C语言中,return语句怎么样返回一个数组?
有。由于C\/C++是允许返回结构体的,可以定义一个结构体模板,把数组作为成员安排在其中,函数中临时声明结构体变量,操作其中的数组;完毕后返回结构体变量,在主调函数中用同类型的结构体变量接收就可间接实现“返回一个数组”。举例代码如下:include "stdio.h"struct A{int m[30];\/\/把数组m安排在...

C语言中,我在函数内部定义了一个新的数组,如何将计算后存于该数组的值...
办法有二:1. 函数内部新数组定义为static,这样可以直接把这个数组返回出来;2. 在函数内部把新数组的内容拷贝到外部数组里。

C语言读取文件如何返回一个数组?
c语言没有直接读取返回数组的函数。看你问题里文件内容格式是:一行一个字符串回车换行。那么,用fgets一次读一行,你写循环调用这个fgets函数把读取的值放在数组里。至于你说的数组长度宽度不定,在c里需用malloc动态申请内存。方法1:用fseek和ftell获取整个文件字节数,然后用malloc申请一个整个文件大小的...

相似回答