我想创建一个新的值数组,我不知道如何有效地执行此操作。由于要创建新数组,我必须调用一个函数,将旧数组作为参数传递。现在我的代码看起来像:
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)
不是你传递给calcNewArray
的数组的sizte b,但它是指针的大小。你需要明确地传递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;
}