假设我定义了一个能构建动态链表的函数,它能返回一个头指针,我在主函数中返回值赋给同类型指针。
为什么在主函数中能输出所有节点?函数调用后,分配的动态存储空间不是没有了吗。求解释,谢谢
2 回答
已采纳
新_day_day_new
TA贡献18条经验 获得超6个赞
c中全局变量是存放在栈中,在程序结束时释放存储空间。函数中的形式参数和非static修饰的参数都是在动态存储区中。它们在函数开始是被分配空间结束时释放其空间。而用malloc等函数分配的空间由用户需要时调用malloc动态分配并且由用户自己释放或者在整个程序结束时释放。所以说虽然你是在函数中申请的空间但是不会随函数结束而导致存储空间被释放。因为你没有在函数里人为释放。所以你返回的头指针依然指向一个存在的空间,在主函数里还能输出节点。
望远
TA贡献1017条经验 获得超1032个赞
这是堆栈空间分配的区别: 1、栈:由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈; 2、堆: 一般由程序员申请内存,也要由程序员释放,而通过malloc申请的内存就属于堆内存。
- 2 回答
- 1 关注
- 1740 浏览
添加回答
举报
0/150
提交
取消