使用指针C从函数返回数组

时间:2015-10-31 22:27:29

标签: c arrays function pointers

我试图理解指针和函数,特别是在从函数返回数组时如何使用指针。我试着写一些代码,看看我是否理解它,但我显然没有。请你看看,告诉我我做错了什么?谢谢。

#include <stdio.h>

int *elmntsum(int *a, int *b);

int main()
{
    int *z;
    int x = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int y = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20} ;

    z = elmntsum(x, y);

    int t;

    for (t = 0 ; t < 10 ;t++){
        printf( "%d\n", z[t]);
    }
    return(0);
}

int *elmntsum(int *a, int *b){
    static int *c;
    int t;

    for (t = 0 ; t < 10 ;t++){
        c[t] = a[t] + b[t];
    }
    return(c);
}

1 个答案:

答案 0 :(得分:0)

您的代码存在许多问题,最重要的一点是您没有为c分配空间。

如果你真的不知道为什么它有用,请不要使用static,在这种情况下肯定没用。

另一个重要问题是xy的声明,它们应该被声明为数组,即

int x[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int y[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20} ;

你可以这样做

int *elmntsum(int *a, int *b, size_t count) {
    int *c;

    c = malloc(count * sizeof(*c));
    if (c == NULL)
        return NULL;
    for (size_t t = 0 ; t < count ;t++)
        c[t] = a[t] + b[t];
    return c;
}

然后你的main()看起来像这样

int main()
{
    int *z;
    int x[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int y[10] = {2, 4, 6, 8, 10, 12, 14, 16, 18, 20} ;

    z = elmntsum(x, y, 10);
    if (z == NULL)
        return -1;
    for (size_t t = 0 ; t < 10 ;t++){
        printf("%d\n", z[t]);
    }
    free(z);
    return 0;
}