C 在函数中更改数组不会';不要改变它';s值

C 在函数中更改数组不会';不要改变它';s值,c,pointers,C,Pointers,我尝试用-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(d

我尝试用-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;
}
#包括
#包括
#包括
无效分配(双**a,整数大小){
*a=malloc(尺寸);
}
双设置向量(双*v){
int i,种子,发送大小;
发送大小=10;
allocate(&v,send_size*sizeof(double));//为向量分配内存
种子=时间(空);
srand(种子);
对于(i=0;i
这是我的屏幕输出:

在函数内部,向量为:

0元素的随机值为-0.79
1元素的随机值为-0.34
2元素的随机值为0.48
3元素的随机值为-0.67
4元素的随机值为-0.70
5元素的随机值为0.61
6元素的随机值为-0.67
7元素的随机值为-0.66
8元素的随机值为-0.44
9元素的随机值为-0.36

来自main的向量是:

v的第一个元素是0.00
v的第一个元素是0.00


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){

不会在
main
中更改
v
,因此
v
在那里保持
NULL
。您应该让
setvector
获取一个
double**
,比如
allocate
,并在
main
中将
v

的地址传递给它。您正在将数组元素的地址传递给
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){

不会在
main
中更改
v
,因此
v
在那里保持
NULL
。你应该让
setvector
拿一个
double**
,比如
allocate
,把
v
的地址传给我,我还不清楚,但非常感谢。我认为是类似于
main
setvector(&v)中的**argv或*argv[]。函数:
double-setvector(double**vec){…allocate(vec);…for(…)(*vec)[i]=1.6*.
。返回值应该是return**vec;对我来说还不清楚,但非常感谢。我认为在
main
setvector(&v);
。函数:
double-setvector(double**vec){…allocate(vec);…for(…)(*vec)[i]=1.6*…
。返回值应为return**vec;