malloc – 从void *到double *的无效转换

我想编写一个使用指针创建双数组副本的函数。 到目前为止这是我的代码:

#include  #include  double* copy (double *array, int size) { double *v=malloc(sizeof(double)*size); for (int i=0; i<size; i++) *(v+i)=*(array+i); return v; } int main () { //double array[]; int size; printf ("size= "); scanf ("%i",&size); double *array=malloc(sizeof(double)*size); for (int i=0; i<size; i++) scanf("%f",&array[i]); copy(array,size); free(array); } 

我有2个编译错误,我无法摆脱。 我明白了

无效转换从void *到double *

当我尝试使用malloc分配内存但我无法理解我做错了什么。

您正在使用C ++编译器。

 double *array=malloc(sizeof(double)*size); 

在C中有效。从任何对象指针类型到void *的隐式转换。

在C ++中它没有效果,没有这样的隐式转换,你需要一个强制转换:

 double *array= (double *) malloc(sizeof(double)*size); 

您正在使用c ++编译器编译c代码。

当你使用c ++编译器时,你应该编写c ++代码,所以malloc()在c ++中并不常见,而是

 double *data = new double[size]; 

将是很好的c ++代码,如果你需要free()指针,你需要

 delete[] data; 

你当然可以在c ++中使用malloc() ,但它会是这样的

 double *data = static_cast(malloc(size * sizeof(double)); 

因为c ++中的void *不会自动转换为任何指针类型。

但是,在c中,没有必要使用强制转换,事实上除了隐藏程序中的错误之外,它还会使代码变得不必要地丑陋,在这里我是否可以转换malloc的结果? 。