我想创建一个新的值数组,我不确定如何有效地执行此操作。由于要创建新数组,我必须调用一个函数,将旧数组作为参数传递。现在我的代码看起来像:
float *newMeasurements1;
newMeasurements1 = malloc(sizeof(calcNewArray(oldArray)));
newMeasurements1 = calcNewArray(oldArray);
float *calcNewArray(float *oldArray) {
float *newArray;
int new_size = sizeof(oldArray) - outliers;
newArray = malloc((new_size) * sizeof(float));
for (i = 0; i < new_size; i++) {
newArray[i] = oldArray[i];
}
return newArray;
}
我不确定这是这样做的正确方法,因为我必须一次调用该功能才能知道新数组的大小。然后将函数称为第二次,将数组实际分配给分配的内存。我怎么能做到这一点?
这一行没有用:
newMeasurements1 = malloc(sizeof(calcNewArray(oldArray)));
只写下:
newMeasurements1 = calcNewArray(oldArray);
Malloc已经在calcNewArray
中完成。
但是,calcNewArray
中还有另一个问题,当您将它们传递到函数时,阵列会衰减到指针到其第一个元素,因此sizeof(oldArray)
不是Sizte Bof您传递给calcNewArray
的数组,但它是指针的大小。您需要将oldArray
的大小明确传递为第二个参数:
float *calcNewArray(float *oldArray, int oldsize) {
float *newArray;
int new_size = oldsize - outliers;
newArray = malloc((new_size) * sizeof(float));
for (i = 0; i < new_size; i++) {
newArray[i] = oldArray[i];
}
return newArray;
}