C语言动态数组的实现

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

Featured image

动态数组使用起来非常灵活,还可以提升程序的运行效率。

一维动态数组

一维动态数组大小的自定义创建

这个例子需要用到头文件<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,把结果分配给临时变量,然后在成功重新分配后替换原始指针即可解决这个警告。

使用完数组后及时销毁是一个好习惯。