在函数中更改数组不会改变它在main中的值

时间:2013-01-29 18:49:28

标签: c pointers

我尝试使用介于-0.8和0.8之间的随机数填充矢量(我必须分配)。我的问题是为什么在main函数中我调用函数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.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

1 个答案:

答案 0 :(得分: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中的main,因此v仍在NULL。您应该setvector获取double**,例如allocate,并将v的地址传递给我。