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

如何从C中的函数返回指向数组的指针?,c,arrays,function,pointers,C,Arrays,Function,Pointers,很抱歉,有很多类似的问题,但我只是不知道我做错了什么(业余提醒!) 我试图在一个函数中填充两个数组,然后将信息返回到main中。我在main中声明数组,但需要在函数中为它们分配内存(这会计算出它们应该有多大)。虽然数组似乎填充得很好,并且我可以从函数内部打印它们,但是当我尝试从main打印它们时,我遇到了一个分段错误 我尝试在这个简化的程序中使用一个填充一个数组的函数进行故障排除-它也有同样的问题。我想我正在塞满我的指针-我做错了什么??以下是代码和输出: #include <stdio.

很抱歉,有很多类似的问题,但我只是不知道我做错了什么(业余提醒!)

我试图在一个函数中填充两个数组,然后将信息返回到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]);
        }
}
#包括
#包括
#包括
#包括
void*make_v(双数值,双*v)
{
int i;
v=(双*)calloc(5,sizeof(双));
对于(i=0;i
double*make_v(double num)
{
int i;
v=(双*)calloc(5,sizeof(双));

对于(i=0;iI将make_v更改为返回double*,然后在末尾返回v。去掉第二个参数。如果传入
double*
指针,则可以更改它指向的位置,但不能更改它指向的位置,因为地址是按值传递的。如果要更新它指向的位置,则需要传递
double**
如下:
void make_v(double num,double**v){…}int main(){…double*v=NULL;…make_v(num,&v);…}
一般不要使用
calloc
&friends或
void*
的结果。也不要毫无必要地使用
void*
!嗨,JerryJeremiah-很抱歉,我很难理解,但我现在如何分配和填充函数中的v?嗨,Bruceg-是的,这会更整洁,但这是一个疑难解答函数。我真正的函数是s 6参数,填充两个数组并返回一个int…所以不幸的是,这不是一个选项。
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;
}