c語言返回數組

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

相關文章
相關標籤/搜索