C语言完美实现动态数组代码分享
简介
动态数组是一种在程序运行时可以动态扩展的数组结构。C语言并没有原生支持动态数组,不过我们可以基于堆内存动态分配的原理,在C语言中实现动态数组。
本文将介绍如何在C语言中完美实现动态数组,并提供代码示例。
分步实现动态数组
1. 分配动态内存
动态数组必须基于堆内存分配实现。我们可以使用标准库中的 malloc
函数动态分配内存空间,并使用指针来引用这块内存空间。
int n = 10;
int* nums = (int*)malloc(n * sizeof(int));
上述代码分配了大小为 n
的动态内存,将其作为整数数组来使用。注意,必须将返回值的类型转换为指针类型,以正确使用指针引用动态内存空间。
2. 扩充动态内存
当我们需要动态扩充数组长度时,必须使用标准库中的 realloc
函数重新分配内存,同时内存空间的数据必须被复制到新的内存空间中。
int new_n = 20;
nums = (int*)realloc(nums, new_n * sizeof(int));
3. 释放动态内存
当我们使用完动态数组后,必须释放其占用的内存空间。我们可以使用标准库中的 free
函数来释放动态内存。
free(nums);
示例
示例1:动态数组求和
我们可以使用动态数组来求一个未知数量的整数之和。
#include <stdio.h>
#include <stdlib.h>
int main() {
int n = 10;
int* nums = (int*)malloc(n * sizeof(int));
int count = 0;
int num;
while (scanf("%d", &num) == 1) {
nums[count] = num;
count++;
if (count == n) { // 当数组满时,动态扩充内存
n *= 2;
nums = (int*)realloc(nums, n * sizeof(int));
}
}
int sum = 0;
for (int i = 0; i < count; i++) {
sum += nums[i];
}
printf("sum: %d\n", sum);
free(nums);
return 0;
}
该程序通过不断读入整数,将其存储在动态数组中,并累加求和。当数组空间用尽时,使用 realloc
函数扩充数组空间。
示例2:动态数组排序
我们可以使用动态数组来保存用户输入的一组整数,并将其进行排序。
#include <stdio.h>
#include <stdlib.h>
int cmp(const void* a, const void* b) {
return (*(int*)a - *(int*)b);
}
int main() {
int n = 10;
int* nums = (int*)malloc(n * sizeof(int));
int count = 0;
int num;
while (scanf("%d", &num) == 1) {
nums[count] = num;
count++;
if (count == n) { // 当数组满时,动态扩充内存
n *= 2;
nums = (int*)realloc(nums, n * sizeof(int));
}
}
qsort(nums, count, sizeof(int), cmp);
printf("sorted array: ");
for (int i = 0; i < count; i++) {
printf("%d ", nums[i]);
}
printf("\n");
free(nums);
return 0;
}
该程序通过不断读入整数,将其存储在动态数组中,并使用快速排序算法对数组进行排序。当数组空间用尽时,使用 realloc
函数扩充数组空间。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言完美实现动态数组代码分享 - Python技术站