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

Dia*_*ana 16 c malloc

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

#include <stdio.h>
#include <stdlib.h>

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);
}
Run Code Online (Sandbox Code Playgroud)

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

从void*无效转换为double*

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

oua*_*uah 38

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

double *array=malloc(sizeof(double)*size);
Run Code Online (Sandbox Code Playgroud)

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

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

double *array= (double *) malloc(sizeof(double)*size);
Run Code Online (Sandbox Code Playgroud)


Iha*_*imi 6

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

当您使用c ++编译器时,您应该编写c ++代码,因此malloc()在c ++中并不常见

double *data = new double[size];
Run Code Online (Sandbox Code Playgroud)

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

delete[] data;
Run Code Online (Sandbox Code Playgroud)

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

double *data = static_cast<double *>(malloc(size * sizeof(double));
Run Code Online (Sandbox Code Playgroud)

因为void *在c ++中没有自动转换为任何指针类型.

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