栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

指针与动态内存申请

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

指针与动态内存申请

C语言定义的整形、浮点型、字符型、数组变量都存放在栈空间中,而栈空间的大小在编译时是确定的,如果需要使用长度不固定的数组,就需要用到堆空间。
相同点:
栈空间和堆空间都在进程地址空间内(程序启动才叫进程,程序是放在磁盘上的有序的指令集合)
不同点:
(1)栈是计算机系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈操作、出栈操作都有专门的指令执行,这就决定了栈的效率比较高;堆则是C/C++函数库提供的数据结构,它的机制比较复杂,效率也不如栈。若使用的空间是固定的,则使用栈,若使用的空间不固定,则使用堆。
(2)栈空间会随着函数的执行结束而释放,堆空间不会随着子函数的结束而释放,必须自己free。

使用malloc动态申请空间(堆空间)
声明:
void *malloc(size_t size)
参数:
size_t 可以看作int型
size - 内存块的大小,以字节为单位,如size=20,则可以存储19个char型数据+1个’’,换成int型就只能存储4个整形数据。
返回值:返回一个(void *)指针,指向已分配大小的内存,如果请求失败,返回NULL。注意接受时注意强制类型转换。

使用完malloc申请的空间后,要及时释放,使用函数free()。需要注意的是,free§中p的值必须和最初malloc返回的值一致,不能发生偏移。(如果在编程中需要p发生偏移,可以多定义一个指针变量p1=p,改动p1即可)
在释放完成后,还需要将p=NULL,否则p将成为野指针

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/330599.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号