原创 关于C语言返回数组的若干问题

2009-4-19 09:50 5499 10 9 分类: 软件与OS

      昨儿有同学问我,怎么在不用全局数组的情况下调用另一个函数的数组,当时我就没想明白,以前也没注意到这个问题,最后还是查了一些资料才明白过来,总结如下:


     如果你有这个想法,可以告诉你已经走入了一个误区,你可以返回一个数,指针,甚至结构,但是就是不能返回一个数组。数组其实是一个基本类型和大小动态可知的一块连续的内存空间(如其定义int buff[10],当然还可以使用mallco),是不能在函数间传递的。


     那怎么来传递?在C语言中一般都是传递简单的数值类型,而传到大的对象比如数组,union,struct,基本上有一个原则就是:调用者负责提供内存,而被调用者负责填写内容。举一个简单的例子:


#include <stdio.h>


int sun(int *a)
{
 int i;
 for(i=0;i<2;i++)
  a*=3;
  return *a;
}
main()
{
 int i, a[]={1,2};
  sun(a);
 for(i=0;i<2;i++)
 printf("a[%d]:%d\n",i,a);
}


不过如果在编译期大小可知的话还是有一种方法,不过也只不过是每次传递都是COPY,并不能算是整个数组的真正返回。举例如下:


#include <stdio.h>
#include <stdlib.h>


#define array_size 10
typedef struct array array;
struct array{


 int val[array_size];
};
array f()
{
 array va={0,1,2,3,4,5,6,7,8,9};
 return va;
}
main()
{
 array a;
 int i;
 a=f();
 for(i=0;i<10;i++)
 printf("%d",a.val);
}


  最后,如果你真的想要数组的返回,建议使用其他语言。。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
10
关闭 站长推荐上一条 /3 下一条