文章目录
指针进阶
内存四区
在系统为程序开辟内存时,将内存区域划分为4块,分别为:
(1)栈区
(2)堆区
(3)全局静态常量区(全局区)
(4)代码区
栈区:存放函数的形参、局部变量等。由编译器自动分配和释放,当函数执行完毕时自动释放。
堆区:用于动态内存的申请与释放,一般由程序员手动分配和释放,若程序员不释放,则程序结束时由操作系统回收。
全局静态常量区(全局区):用于动态内存的申请与释放,一般由程序员手动分配和释放,若程序员不释放,则程序结束时由操作系统回收。
代码区:存放可执行的代码,一般为CPU 执行的机器指令。(由编译器翻译后的指令放在代码区)
结构体指针变量的使用
结构体指针变量:是一个保存结构体变量地址的指针变量,我们对这个指针变量进行解引用,就可访问到这个结构体变量的数据以及更改数据。
结构体指针变量的定义格式:指针指向的类型 * 指针名 = NULL;
结构体指针
通过结构体指针引用结构体变量及其结构体成员:
结构体指针引用符:‘->’
结构体指针引用成员的基本格式:结构体指针名->结构体成员名
结构体指针数组
- 方式一:通过for循环输出成员的名字
- 方式二:通过p = p->next,来获取成员名字并输出
动态内存分配
什么是动态内存分配:
指用户可以根据自己的需要,向系统申请所需大小的内存空间;由于没有声明部分来定义它们是为变量的地址还是为数组的地址,所以只能通过指针来引用它们。
要使用动态内存开辟,需要包含stdlib.h头文件
怎样建立内存的动态分配:
①malloc函数:malloc(int size);
用于分配一个大小为size的内存区域。
例如:char *p=(char *)malloc(100)
②calloc函数:calloc(unsigned n,int size);
用于分配n个大小为size的连续内存区域,可以为一维数组开辟动态内存空间。
例如:int *p=(int *)calloc(10,sizeof(int));
③realloc函数:realloc(void * p,unsigned int size);
用于改变已经通过malloc函数或calloc函数开辟的内存空间的大小。
例如:realloc(p,sizeof(int)*6);
④free函数:void free(void * p);
用于释放指针变量所指向的动态内存空间。
例如:free( p );
注意:动态内存需要手动申请,在对堆区申请,申请完后需要自己释放。
- 例1:malloc(申请的内存大小) ;单位:字节