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) 返回多維數組方法相似。內存