C语言——动态内存分配
动态内存分配
谭浩强第五版,p284
全局变量分配在内存静态存储区内
局部变量分配在内存动态存储区内(称为栈)
c语言还可在内存申请动态存储区(称为堆)
使用malloc(size_t size) , realloc(void* arr , size_t size ) , free( void* arr )
区别在于:栈内变量地址:出栈和入栈声明同一变量,变量地址相同

堆内变量:地址不一样
测试
1. 循环声明变量

2.循环调用函数声明变量

为何着虑局部变量与堆变量间地址不同?
数据结构的链表:java可循环声明对象来构造链表。 c语言不能循环声明,只可循环动态申请。
原因:c语言循环声明变量是栈变量,地址一致。导致链表头指针指向的节点数据会不断改变为最新数据。如图所示:

由此推断:动态申请内存意义:获取绝对不一样的地址

浙公网安备 33010602011771号