简介
全局变量是分配在内存中的静态存储区的,非静态的局部变量是分配在内存中的动态存储区的,这个存储区是一个称为栈(stack)的区域。
除此以外,C语言还允许建立内存动态分配区域,以存放一些临时用的数据,这些数据不必在程序的声明部分定义,也不必等到函数结束时才释放,而是需要时随时开辟,不需要时随时释放。这些数据是临时存放在一个特别的自由存储区,称为堆(heap)区。由于未在声明部分定义它们为变量或数组,因此不能通过变量名或数组名去引用这些数据,只能通过指针来引用。
动态分配内存
C语言中,对内存的动态分配,主要是通过malloc、calloc、free和realloc这四个函数实现。
1.malloc函数
函数原型为
1 | void * malloc(unsigned int size); |
作用:在内存的动态存储区中分配一个长度为size的连续空间。
函数的返回值是所分配区域的第一个字节的地址。指针的基类型为void,即不能指向任何类型的数据,只提供一个地址。如果函数未能成功地执行,则返回空指针(NULL)。
示例
1 |
|
事实上,第5行中的代码也可以写成如下形式:
1 | int * p = malloc(5*sizeof(int));//由系统进行隐式的类型转换 |
推荐采用第一种写法,显式的强制转换,更加清楚直观。
另外,因为在不同系统中存放一个指定类型的字节数是不同的,为了使程序具有通用性,我在第5行中使用了sizeof运算符测定在本系统中整数的字节数。
(未完待续)