Java语言的函数能够轻易的返回一个数组,而C/C++却不能直接返回一个数组。这是因为在C/C++中,数组不是一种类型,所以不能被直接返回。 在C/C++中,通常有两种方法来返回一个数组。数组
第一种方法: 返回一个指向数组的指针,例如char (*retArray)[10]声明了一个函数retArray,该函数能够返回指向具备10个char元素的数组 例子以下:安全
[cpp] view plain copy函数
#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/n",(*b)[0]); /*释放空间*/ free(b); return 0; }
第二种方法: 若是你不喜欢用指针的形式返回数组,那么能够采用返回一个结构的形式。这种形式相对较安全,能够避免忘记释放指针而形成内存泄露, 也能够避免访问悬挂指针形成的错误。但缺点是因为结构是先拷贝再返回,所以若是结构较大时,会影响效率和占用较大内存。 例子以下:指针
[cpp] view plain copycode
#include <stdio.h> struct tag { int a[10]; }x,y; struct tag retArray() { int i=0; for(i=0;i<10;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) 返回多维数组方法相似。内存