C语言指针(八)

动态内存分配与与指向它的指针变量
- 内存的动态分配
- 建立动态内存
- malloc函数开辟动态存储区
- calloc函数开辟动态储存区
- realloc函数重新分配动态存储区
- free函数释放动态储存区
- void指针类型
- 例子
内存的动态分配
全局变量分配在静态储存区,非静态的局部变量分配在内存中的动态储存区(栈)。C语言建立内存动态分配区域,是一个特别的自由存储区,称为堆区,存放一些临时的数据,这些数据不必声明不必释放,而是随时开辟,随时释放。也可以根据需要,像系统申请所需大小的空间。
建立动态内存
- 四个函数malloc,calloc,free,realloc。包含在头文件stdlib中。#include<stdlib.h>
malloc函数开辟动态存储区
在内存的动态存储区分配一个长度为size的连续空间。是一个返回指针变量的函数,返回的指针指向该分配域的第一个字节。比如malloc(100)。指针基类型为空类型(void型的指针类型),只提供一个纯地址,如果函数没有成功执行,返回NULL
calloc函数开辟动态储存区
开辟n个长度为size的连续空间,calloc可以为一维数组开辟动态储存空间,n为数组元素个数,每个元素长度为size。这就是动态数组,
realloc函数重新分配动态存储区
可以改变由malloc和calloc函数获得的动态空间大小,用realloc重新分配
free函数释放动态储存区
释放指针变量p所指向的动态空间,使这部分能重新被其他变量使用。
void指针类型
void型指针变量指向不确定类型,在他的值赋给另一个指针变量的时候由系统对他进行类型变化。如下
指向空类型的指针变量可以存放任何类型的数据,只是在储存的时候进行一个类型转换
例子
- 建立动态数组,输入5个学生的成绩,另外一个函数检查其中有无低于60分的,输出不合格的成绩
sizeof的作用是测定本系统整数的字节数
p1=malloc(5 * sizeof(int));在编译的时候系统可以进行隐形的转换。
提一个名词:链表