如何从C中的函数返回指向数组的指针?

时间:2016-11-09 00:57:50

标签: c arrays function pointers

很抱歉有很多类似的问题,但我无法弄清楚我做错了什么(业余警报!)。

我正在尝试在函数中填充两个数组,然后在main中获取信息。我在main中声明了数组,但是需要在函数中分配它们的内存(这可以解释它们应该有多大)。虽然数组看起来很好,我可以在函数内打印它们,但是当我尝试从main打印时,我遇到了分段错误。

我试图在这个简化的程序中使用填充一个数组的函数进行故障排除 - 它有同样的问题。我想我是在填补我的指针 - 我做错了什么?这是代码和输出:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>

void *make_v(double num, double *v)
{
        int i;
        v = (double *)calloc(5,sizeof(double));
        for (i=0; i<5; i++) {
                num += 5;
                v[i] = num;
        }

        printf("IN: ");
        for (i=0; i<5; i++)
                printf("%lf ", v[i]);
        printf("\n");
}

main(int argc,char **argv)
{
        double *v=NULL;
        double num=10.0;
        int i;

        make_v(num, v);

        printf("OUT:\nv:[");
        for (i=0; i<5; ++i) {
                printf("%lf ", v[i]);
        }
}

这输出: IN:15.000000 20.000000 25.000000 30.000000 35.000000 OUT: 分段错误

我在linux中编码,如果这有所作为......

希望有人能提供帮助,谢谢!

1 个答案:

答案 0 :(得分:0)

double *make_v(double num)
{
    int i;
    v = (double *)calloc(5,sizeof(double));
    for (i=0; i<5; i++) {
            num += 5;
            v[i] = num;
    }

    printf("IN: ");
    for (i=0; i<5; i++)
            printf("%lf ", v[i]);
    printf("\n");
    retrun v;
}