指针与动态内存申请

本文介绍了C语言中栈和堆空间的使用。栈主要存放固定大小的变量,如整型、浮点型、字符型和数组,而堆则用于存储长度不固定的数组等动态分配的空间。栈由系统自动管理,效率高,但空间有限;堆空间由程序员通过malloc等函数手动管理,效率较低,但更灵活。栈空间随函数结束自动释放,堆空间需使用free函数手动释放,释放后应将指针设为NULL,防止野指针问题。
摘要由CSDN通过智能技术生成

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值