C 在函数中更改数组不会';不要改变它';s值
我尝试用-0.8到0.8之间的随机数填充向量(我必须分配)。我的问题是,为什么在调用函数setvector()时,主函数中没有返回向量,而我仍然使用零进行初始化?谢谢。这就是我所做的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
#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.791元素的随机值为-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;