昨儿有同学问我,怎么在不用全局数组的情况下调用另一个函数的数组,当时我就没想明白,以前也没注意到这个问题,最后还是查了一些资料才明白过来,总结如下:
如果你有这个想法,可以告诉你已经走入了一个误区,你可以返回一个数,指针,甚至结构,但是就是不能返回一个数组。数组其实是一个基本类型和大小动态可知的一块连续的内存空间(如其定义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);
}
最后,如果你真的想要数组的返回,建议使用其他语言。。
文章评论(0条评论)
登录后参与讨论