从C中的函数返回整数数组

时间:2013-07-19 10:22:43

标签: c arrays pointers

我的程序如下

#include<stdio.h>

int *intial(int);

int main (void)
{
    int i, *b;

    b=intial(5);
    for(i=0;i<5;i++)
        printf("%d\t",*(b+i));
    getch();
}

int *intial(int t)
{
    int i, *a; 

    for(i=0;i<t;i++)
        a[i]=i;
    return a;
}

但我得到了垃圾值。

我也试过这个

int *intial(int t)
{
    int i, a[10];

    for(i=0;i<t;i++)
        a[i]=i;    
    return a;
}

但它没有用。

2 个答案:

答案 0 :(得分:3)

为了正常工作,您的功能应该是

int *intial(int t)
{
    int i;
    int *a = malloc(t * sizeof(*a));
    if (!a) return NULL; // error checking
    for(i=0;i<t;i++) {
        a[i]=i;
    }
    return a;
}

此函数的“调用条约”是返回的指针是一个malloc(),调用者有义务free()它。

当然,调用者也应该进行适当的错误检查:

int main()
{
    int i;
    int *b;
    b=intial(5);
    if (!b) {
        fprintf(stderr, "Malloc error.\n");
        return 1;
    }
    for(i=0;i<5;i++) {
        printf("%d\t",*(b+i)); // *(b+i) should be replaced with b[i] for readability
    }
    free(b); // free the memory
    return 0;
}

答案 1 :(得分:2)

您需要使用malloc()为数组分配内存。否则a以及b将不会特别指出任何内容。