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

从C中的函数返回整数数组,c,arrays,pointers,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;

我的程序如下

#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*初始(int);
内部主(空)
{
int i,*b;
b=初始值(5);

对于(i=0;i您需要使用
malloc()
为数组分配内存。否则
a
,因此
b
,将不会指向任何特定内容。

为了正常工作,您的函数应为

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;
}

您希望
a
在不初始化它的情况下指向何处?指针不是魔法…未定义的行为,因为
a
未分配。请尝试
int*a=malloc(t*sizeof(int));
。记住
free(b)
在您的程序退出之前。可能重复和625482976472个类似问题。Bleeech…那是什么编码风格?Radom缩进、奇怪的东西等…您希望我们如何实际阅读此内容?我以前回答过类似的问题(不是重复):
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;
}
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;
}