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) 返回多维数组方法相似。内存

相关文章
相关标签/搜索