使用内存管理函数实现动态数组

C语言提供了一些内存管理函数,这些内存管理函数可以按需要动态地分配内存空间,也可把不再使用的空间释放,为有效地使用内存资源提供了手段。

动态数组,指的就是利用内存的申请和释放函数,在程序的运行过程中,根据实际需要指定数组的大小。其本质就是一个指向数组的指针变量。

主要用到的内存管理函数是:malloc和free。

1、分配内存函数malloc:

调用形式:(类型说明符*)malloc(size);

功     能:在内存的动态存储区中分配一块长度为size字节的连续区域。

返     回:该区域的首地址。

“类型说明符”表示把该区域用于何种数据类型。

“(类型说明符*)”表示把返回值强制转换为该类型指针。

“size”是一个无符号数。

例如,pc = (char *)malloc(100);表示分配100个字节的内存空间,并强制转换为字符数组类型,函数的返回值为指向该字符数组的指针。

2、释放内存空间函数free:

调用形式:free(void *ptr);

功     能:释放ptr所指向的一块内存空间。ptr是一个任意类型的指针变量,它指向被释放区域的首地址。

 

实现一维动态数组程序框架:

int num;   //要创建一个大小为num的一维数组,num由用户输入或其他方式获得

int *array;   //创建一维指针来指向一维数组

array = (int *)malloc(sizeof(int) * num);   //动态创建一个大小为num的整形一维数组

if(array == NULL)

{

         printf(“out of memory, press any key to quit… ”);

         exit(0);
     }

…   //使用动态数组

free(array);   //释放由malloc申请的内存空间

 

实现二维动态数组程序框架:

int i;

int row, col;   //要动态创建一个行数为row,列数为col的二维数组,row和col由用户输入或其他方式获得

int **array;   //创建二维指针来指向二维数组

array = (int **)malloc(sizeof(int *) * row);    //动态创建一个大小为row×col的整形二维数组

for(i=0; i<row; i++)

{

         array[i] = (int *)malloc(sizeof(int) * col);
     }

…   //使用动态数组

for(i=0; i<row; i++)

{

         free(array[i]);   //先释放一维指针

}

free(array);   //最后释放二维指针

原文地址:https://www.cnblogs.com/nufangrensheng/p/3870136.html