由于最后返回值的类型是数组类型,所以在刚开始的时候定义函数int px(int b[5])应该为int * px(int b[5])就可以。即添加一个*就可以。
成都创新互联公司长期为上千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为榆次企业提供专业的网站建设、成都网站制作,榆次网站改版等技术服务。拥有10多年丰富建站经验和众多成功案例,为您定制开发。
C/C++不能直接返回一个数组。这是由于在C/C++中,数组不是一种类型,因此不能被直接返回。 在C/C++中,一般有两种方法来返回一个数组。 第一种方法: 返回一个指向数组的指针,例如char (*retArray)[10]声明了一个函数retArray,该函数可以返回指向具有10个char元素的数组例子如下:#include#includeint (*retArray())[10]{int (*a)[10];int i=0;/*动态开辟空间*/ a=calloc(10,sizeof(int));/*赋值*/for(i=0;i10;i++){(*a)[i]=i;}return a;}int main(){int (*b)[10]; /*函数返回指向数组的指针*/ b=retArray(); /*打印第一个元素*/ printf("%d/n",(*b)[0]); /*释放空间*/free(b);return 0;}第二种方法: 如果你不喜欢用指针的形式返回数组,那么可以采用返回一个结构的形式。这种形式相对较安全,可以避免忘记释放指针而造成内存泄露,也可以避免访问悬挂指针造成的错误。但缺点是由于结构是先拷贝再返回,因此如果结构较大时,会影响效率和占用较大内存。 例子如下:#includestruct tag{int a[10];}x,y;struct tag retArray(){int i=0;for(i=0;i10;i++) x.a[i]=i;return x;}int main(){struct tag y=retArray(); printf("%d/n",y.a[3]);return 0;}注意:(1)在返回指针时要切记要避免内存泄露和访问悬挂指针。 (2)很多人认为指针和数组等价的,这是错误的。int (*a)[10]和int b[10]两者是不能直接用a=b来赋值的。在数组和指针作为函数参数传递时,二者可以认为等价,这是因为数组会被转化为指针来传递。 (3)返回多维数组方法类似。
#includestdio.h
main()
{
float change(float array[3][3]);
float a[3][3];
int i,j;
for (i=0;i3;i++)
for (j=0;j3;j++)
scanf("%d",a[i][j]);
change (a);
for (i=0;i3;i++)
for (j=0;j3;j++)
printf("%4d\n",a[i][j]);
}
float change(float array[3][3]) // 这里可以写出 array[][3]
{
float c[3][3];
int m,n;
for(m=0;m3;m++)
for(n=0;n3;n++)
c[n][m]=array[m][n];
for(m=0;m3;m++)
for(n=0;n3;n++)
arry[m][n]=c[m][n]; //不想改变你的程序,所以在这里修改。这样 arry在主函数中是可以访问的。。。不用返回了。
}
以上回答你满意么?
在C语言中,无法直接返回一个数组,但是可以通过返回对应类型指针的方式,返回数组。
在大多数情况下,一维数组和一维指针是可以通用的。
比如,定义一个函数,申请一定长度的整型动态数组,其长度用参数传入,并将结果返回。如出错,返回空指针NULL。 代码可以写成如下形式:
int *int_array_create(int n)//参数n为数组元素个数
{
int *r;
if(n=0) return NULL;//参数错误
r = (int *)malloc(sizeof(int)*n);//申请内存空间,大小为n个int长度。
return r;//返回得到的整型数组的指针。
}