当前位置: 代码迷 >> C语言 >> 可以用函数返回一个数组吗?
  详细解决方案

可以用函数返回一个数组吗?

热度:100   发布时间:2006-05-22 12:53:00.0
可以用函数返回一个数组吗?
int trsmat(int a[][5])
{int b[5][1];
int i;
int j;
for(i=0;i<1;i++)
for(j=0;j<5;j++)
b[j][i]=a[i][j];
return b;
}这个函数对吗?
编译后的错误如下,给指点一下吧,谢谢 啊!
error C2440: 'return' : cannot convert from 'int [5][1]' to 'int'
搜索更多相关的解决方案: 函数  

----------------解决方案--------------------------------------------------------
回复:(zhaoqiang053)可以用函数返回一个数组吗?
以下是引用zhaoqiang053在2006-5-22 12:53:00的发言:
int trsmat(int a[][5])
{int b[5][1];
int i;
int j;
for(i=0;i<1;i++)
for(j=0;j<5;j++)
b[j][i]=a[i][j];
return b;
}这个函数对吗?
编译后的错误如下,给指点一下吧,谢谢 啊!
error C2440: 'return' : cannot convert from 'int [5][1]' to 'int'

就像编译器报的错误:不能从int [5][1]强制转换为int类型。
代你修改一下:
int** trsmat(int a[][5]) //二维数组与二级指针相当,故添**
{static int b[5][1]; //要加static以延长b[][]的“生命”
int i;
int j;
for(i=0;i<1;i++)
for(j=0;j<5;j++)
b[j][i]=a[i][j];
return b;
}


----------------解决方案--------------------------------------------------------
这么样是不行的,返回的是一个指针,必须用指针函数。
----------------解决方案--------------------------------------------------------

不懂,好难


----------------解决方案--------------------------------------------------------
//返回2维确有难度,那就返回1维吧
#include <stdio.h>
int* trsmat(int a[][5])
{ static int b[5][3];
int i, j;
for(i=0;i<3;i++)
for(j=0;j<5;j++)
b[j][i]=a[i][j];
return b[0];
}
int main()
{
int u[3][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
int *v,i,j;
v = trsmat(u);
for(i=0;i<5;i++,printf("\n"))
for(j=0;j<3;j++)
printf("%3d",v[3*i+j]);
return 0;
}
----------------解决方案--------------------------------------------------------
将数组作为函数返回值非法!
----------------解决方案--------------------------------------------------------
楼上也只是返回数组的第一个元素的指针而已,并非可以返回数组
----------------解决方案--------------------------------------------------------
以下是引用金为床兮银为椅在2006-5-22 13:59:00的发言:
楼上也只是返回数组的第一个元素的指针而已,并非可以返回数组

汗...你知道为什么 scanf("%s",a); 可以不用写&吗..不就是因为所谓数组就是指其数组第一个元素的指针吗?

不过我想5楼也有一点不成问题的问题.

我想还是写成 return b; 比较好吧..虽然函数强制返回了指针.不过很容易叫人误解.

如果你有别的特别的意思(故意写成那样) 那就是我多嘴了.


----------------解决方案--------------------------------------------------------
return b[0]; 相当于 return (int *)b;

return b相当于二级指针和函数返回值类型不符

返回整个数组?显然只可以返回一个指针来引用这个数组
否则只能写一个类来实现

----------------解决方案--------------------------------------------------------

你汗,我倒,返回指针是返回数组吗?你只是利用返回指针找到数组而已。


----------------解决方案--------------------------------------------------------
  相关解决方案