我可以在函数中返回double*吗?

Dev*_*vel 5 c double return-value

我可以这样做吗?这会有用吗?

double *vec_subtraction (char *a, char *b, int n)
{   
    double *result;
    int i;

    for(i=0; i<n; i++)
        result[i] = a[i]-b[i];

    return result;
}
Run Code Online (Sandbox Code Playgroud)

然后在主要:

double *vec=vec_substraction(a, b, n);
for(i=1; i<n; i++)         
    printf("%d", vec[i]);
Run Code Online (Sandbox Code Playgroud)

a和b是具有相同元素数的向量,n是元素数.

Mar*_*iot 11

是的,你可以,但你需要为result某个地方分配内存.

基本上,您可以在内部vec_subtraction或外部分配内存vec_subtraction,如果您在外部分配,则可以静态或动态地执行此操作.

如果你打算在里面分配:

double *vec_subtraction (char *a, char *b, int n) {
    double *result = malloc(sizeof(double)*n);
    int i;
    for(i=0; i<n; i++)
        result[i] = a[i]-b[i];

    return result;
}
Run Code Online (Sandbox Code Playgroud)

在主要:

double *vec;
// ...
vec = vec_subtraction(a, b, n);
// ...
free(vec); 
Run Code Online (Sandbox Code Playgroud)

不要忘记稍后free调用的结果vec_subtraction.


如果您要在外部分配,则需要传入指向内存的指针:

void vec_subtraction (char *a, char *b, int n, double *result) {
    int i;
    for(i=0; i<n; i++)
        result[i] = a[i]-b[i];
}
Run Code Online (Sandbox Code Playgroud)

在主要:

// choose one of:
// double *vec = malloc(sizeof(double)*n);
// double vec[10]; // where 10= n.
vec_subtraction(a, b, n, vec);

// if you used *vec = malloc... remember to call free(vec).
Run Code Online (Sandbox Code Playgroud)