0

-0.8から0.8の間の乱数でベクトル(割り当てる必要があります)を埋めようとします。私の質問は、関数を呼び出したときにメイン関数でsetvector()がベクトルを返さず、ゼロで初期化されたものを取得するのはなぜですか?どうもありがとう。ここで私がしたこと

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void allocate(double **a, int size) {
    *a = malloc(size);
}

double setvector(double *v){
    int i, seed, send_size;

    send_size = 10;

    allocate(&v, send_size * sizeof(double)); // allocate memory for the vector
    seed = time(NULL);
    srand(seed);
    for (i = 0; i < send_size; i++)
    {
        v[i] = 1.6*((double) rand() / (double) RAND_MAX) - 0.8;
    }
    printf("Inside function the vector is:\n\n");
    for (i = 0; i < 10; i++)
    {
        printf("The %d element has the random %4.2f\n", i, v[i]);
    }
    return *v;
}

int main(){
    double *v = NULL;
    setvector(v);
    printf("\nThe vector from main is:\n\n");
    printf("The 1st element of v is %4.2f\n", &v[0]);
    printf("The 1st element of v is %4.2f\n", &v[1]);

    return 0;
}

これが私の画面出力です:

関数内のベクトルは次のとおりです。

0要素はランダム-0.79を持っています 1
要素はランダムを持っています-0.342要素はランダムを持っています0.483要素はランダムを持っています-0.674要素はランダムを持っています-0.705要素は ランダム を持っています0.616 要素は 持っていますランダム-0.677 要素はランダム-0.66を持ってい ます8要素はランダムを持っています-0.449 要素はランダムを持っています-0.36







mainからのベクトルは次のとおりです。

vの最初の要素は0.00です。v
の最初の要素は0.00です。

4

1 に答える 1

6

配列要素のアドレスをにmain渡していますprintf

printf("The 1st element of v is %4.2f\n",&v[0]);
printf("The 1st element of v is %4.2f\n",&v[1]);

それはする必要がありますprintf(..., v[0]);

さらに遠く:

double setvector(double *v){

では変わらないので、そこにvとどまります。、 likeを取り、のアドレスに渡す必要があります。mainvNULLsetvectordouble**allocatev

于 2013-01-29T18:53:48.657 に答える