再次优化上述代码,不要定义这个整数数组的大小
时间: 2024-02-09 18:11:06 浏览: 51
解决数组定义太大无法运行问题
5星 · 资源好评率100%
以下是再次优化后的代码,可以让用户输入整数数组,并将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序:
```c
#include <stdio.h>
#include <stdlib.h>
void moveZeros(int* nums, int numsSize) {
int i, j = 0;
for (i = 0; i < numsSize; i++) {
if (nums[i] != 0) {
nums[j++] = nums[i];
}
}
while (j < numsSize) {
nums[j++] = 0;
}
}
int main() {
int *nums, numsSize, i;
printf("请输入整数数组的长度:");
scanf("%d", &numsSize);
nums = (int*)malloc(numsSize * sizeof(int));
printf("请输入整数数组:");
for (i = 0; i < numsSize; i++) {
scanf("%d", &nums[i]);
}
moveZeros(nums, numsSize);
printf("移动后的数组为:");
for (i = 0; i < numsSize; i++) {
printf("%d ", nums[i]);
}
free(nums);
return 0;
}
```
在这个优化后的代码中,我们使用了动态内存分配方法,首先使用 `malloc` 函数分配了一个大小为 `numsSize` 的整数数组 `nums`。然后,我们使用 `scanf` 函数输入用户的整数数组,并调用 `moveZeros` 函数来实现将0元素移动到末尾的功能。最后,我们使用一个循环打印出移动后的数组元素,以验证程序的正确性。注意,在程序结束时,我们使用 `free` 函数释放了动态分配的内存。
这种方法的优势在于可以根据用户的输入动态地分配内存空间,而不用提前定义一个固定的数组大小,从而更加灵活和高效。但是需要注意的是,由于动态分配的内存需要手动释放,所以在程序中一定要确保使用 `free` 函数释放内存,避免出现内存泄漏的情况。
阅读全文