我想创建一个新的值数组,但不确定如何有效地执行此操作。自创建新数组以来,我必须调用一个函数,并将旧数组作为参数传递。现在,我的代码如下所示:
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;
}
我不确定这是否是正确的方法,因为我必须调用一次函数才能知道新数组的大小。然后第二次调用该函数以将数组实际分配给分配的内存。 我该怎么办?
答案 0 :(得分:0)
此行无用:
newMeasurements1 = malloc(sizeof(calcNewArray(oldArray)));
只写这个:
newMeasurements1 = calcNewArray(oldArray);
malloc已在calcNewArray
中完成。
但是calcNewArray
中还有另一个问题,当您将数组传递给函数时,数组会衰减到指向其第一个元素的指针,因此sizeof(oldArray)
并不是传递给{{1 }},但这是指针的大小。您需要明确地传递calcNewArray
的大小作为第二个参数:
oldArray