我试图将一个动态分配数组(addVec
)的元素复制到内存中的另一个(array
)中,在此之前,将指向该数组的指针从main
传递到一个函数(changeArray
),该函数将值分配给addVec
。
到目前为止,我的做法是:
1.在main
中动态分配数组(array
)
1.在changeArray()
中动态分配另一个数组(addVec
)
1.传递这个动态分配数组的指针,并在changeArray中接收它。
但是,我不确定如何正确执行步骤3和4,即将addVec
的元素复制到array
中。
void changeArray(double** vec1)
{
double* addVec = (double*)calloc(SIZE, sizeof(double));
double num = 1.0;
for (int i = 0; i < SIZE; ++i)
{
*(addVec + i) = num;
num = num + 1;
}
printf("Printing out addVec: \n");
for (int i = 0; i < SIZE; ++i)
{
printf("%.1f ", *(addVec + i));
}
printf("\nNow we want to copy elements from addVec to vec1.\n");
// Step 4
for (int i = 0; i < SIZE; ++i)
{
**(vec1 + i) = *(addVec + i);
}
free(addVec);
}
int main()
{
double* array = (double*)malloc(SIZE * sizeof(double));
double num = 11.0;
for (int i = 0; i < SIZE; ++i)
{
*(array + i) = num;
num = num + 1;
}
printf("The address of array is: %x \n", array);
changeArray(&array);
printf("The array is now: 1, 2, 3... \n");
for (int i = 0; i < SIZE; ++i)
{
printf("%.1f ", *(array + i));
}
free(array);
return 0;
}
1条答案
按热度按时间hivapdat1#
函数
changeArray
声明如下这说不通例如,指针
array
通过指向它的指针引用传递给函数但是传递的指针在函数内不改变。函数声明是没有意义的。您可以至少像这样声明该函数
就像
要改变由指针
array
指向的数组的元素,动态地再分配一个数组没有任何意义。然而,在任何情况下,函数在这个
for
循环中有一个bug相反你需要写
也就是说,首先需要解引用指针
vec1
以访问原始指针array
,然后应用指针算术,方法与赋值语句右侧相同。如果你想动态地创建一个新的数组,并用新动态分配的数组的地址重新分配传递的指针,那么函数可以看起来像这样
在这种情况下,它被称为
changeArray( &array )
。