【发布时间】:2020-10-02 23:01:27
【问题描述】:
我用 C 语言编写了一个函数,用于将一个 int 数组中的所有素数复制到一个大小相同的新动态数组中。
这是函数:
int *cpy(int arr[], int size){
int *newArr = malloc(size * sizeof(int));
for (int i = 0; i < size; i++) {
if (isPrime(arr[i])) {
*(arr + i) = arr[i];
}
}
return newArr;
}
这是驱动代码
int arr[SIZE] = { 129, 73, 87, 2, 923, 6743, 983, 23 };
int *newArr = cpy(arr, SIZE);
printf("Question 4: ");
printIntArr(newArr);
free(newArr);
注意SIZE 是我用来存储所有原型/宏的头文件中定义为 20 的宏
由于某种原因,我得到以下输出:
Question 4: 12261328 12255424 285212761 39925 33619971
我不明白我做错了什么。我对 C 比较陌生,所以对于愚蠢的错误,我很抱歉
编辑:我尝试了第一个评论解决方案,但我得到了:
Question 4: 129 6684864 87 33150 923
【问题讨论】:
-
*(arr + i) = arr[i];->*(newArr + i) = arr[i]; -
我试过了,但我得到了
Question 4: 129 6684864 87 33150 923 -
您需要第二个索引来跟踪将条目添加到
newArr。您需要告诉调用者添加了多少条目。 -
我不确定你的意思。
void printIntArr(int* arr)使用SIZE在我的头文件中定义为 8。它知道接收到的数组的大小,但新数组中的元素看起来像是垃圾值。 -
是的,但您的
newArr不一定用SIZE值填写。该函数的重点是只用素数填充它。因此,根据定义,它可能包含比原始数组更少的值。此外,出于类似原因,您不能使用i作为newArray的索引,因为并非所有这些索引都将用于新数组。