我尝试使用介于-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
答案 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
的地址传递给我。