鉴于您的示例,第一个问题是您真的需要动态分配吗?如果您只想返回在函数内部初始化的数组的地址,您可以使用static
变量:
double * vectorComponents ()
{
static double componentSet[] = {1, 2, 3};
return componentSet;
}
如果您确实需要一个动态数组,那么有很多方法可以做到这一点。如果您计算数组,您可以稍后malloc()
存储。free()
如果您希望初始化一个动态数组,则可以更改值并返回它,您可以使用静态数组来执行此操作。例如:
double * vectorComponents2 ()
{
static double componentSet[] = {1, 2, 3};
double *dynamic = malloc(sizeof(componentSet));
memcpy(dynamic, componentSet, sizeof(componentSet)); // copy values
// modify contents of dynamic here if needed
return dynamic;
}
使用memcpy
静态数组比设置单个值要短,并且可以轻松更改数组的内容和大小。