3 min to read
C语言动态数组的实现
在C语言中实现动态大小的数组,提高程序效率

动态数组使用起来非常灵活,还可以提升程序的运行效率。
一维动态数组
一维动态数组大小的自定义创建
这个例子需要用到头文件<stdlib.h>中的库函数 void *malloc(size_t size)
,该函数的详细用法可以在 C库函数 - malloc() 上查看。
#include <stdio.h>
#include <stdlib.h>//malloc库函数位于这个头文件中
int main()
{
int i;
int arrLen=15;//要创建的数组长度
int* array;//声明指向数组的指针
array = (int*)malloc(arrLen*sizeof(int));//让系统分配内存,并把地址赋给指针。这个函数的参数是分配的字节数,而不是元素数。
//初始化数组
for (i = 0; i < arrLen; i++)
{
if (array)//检测指针是否指向了地址,有时候内存不足,会变成NULL
{
array[i] = i + 1;
}
}
//输出数组
for (i = 0; i < arrLen; i++)
{
if (array)
{
printf("%d ", array[i]);
}
}
free(array);//释放第一维指针
return 0;
}
输出结果为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
对一维数组大小进行修改
这个例子需要用到头文件<stdlib.h>中另外一个库函数 void *realloc(void *ptr, size_t size)
,该函数的详细用法可以在C库函数 - realloc()上查看。
#include <stdio.h>
#include <stdlib.h>//realloc库函数位于这个头文件中
int main()
{
int i;
int arrLen=15;
int *array;
array = (int*)malloc(arrLen*sizeof(int));
for (i = 0; i < arrLen; i++)
{
if (array)
{
array[i] = i + 1;
}
}
arrLen = 25;//改变数组元素数
array = (int*)realloc(array, arrLen * sizeof(int));//动态改变数组大小,重新调整array数组的大小。
for (i = 0; i < arrLen; i++)
{
if (array)
{
array[i] = i + 1;
}
}
//输出数组
for (i = 0; i < arrLen; i++)
{
if (array)
{
printf("%d ", array[i]);
}
}
free(array);//释放数组
return 0;
}
输出结果为
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
不过Visual Studio在这个时候抛出了一个警告C6308,把结果分配给临时变量,然后在成功重新分配后替换原始指针即可解决这个警告。
使用完数组后及时销毁是一个好习惯。