700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C语言|用指针实现内存动态分配(malloc calloc函数的使用)

C语言|用指针实现内存动态分配(malloc calloc函数的使用)

时间:2019-12-13 06:04:04

相关推荐

C语言|用指针实现内存动态分配(malloc calloc函数的使用)

程序中需要使用各种变量来保存被处理的数据和各种状态信息,变量在使用前必须被定义且安排好存储空间(包括内存起始地址和存储单元大小)。C语言的全局变量、静态局部变量的存储是在编译时确定的,其存储空间的实际分配在程序开始执行前完成。对于局部自动变量,在执行进入变量定义所在的复合语句时为它们分配存储单元,这种变量的大小也是静态确定的。

一般情况下,运行中的很多存储要求在写程序时无法确定,因此需要一种机制,可以根据运行时的实际存储需求分配适当的存储区,用于存放那些在运行中才能确定数量的数据。C语言为此提供了动态存储管理机制,允许程序动态申请和释放存储空间。

在C语言中主要用两种方法使用内存:一种是由编译系统分配的内存区;另一种是用内存动态分配方式,留给程序动态分配的存储区。动态分配的存储区在用户的程序之外,不是由编译系统分配的,而是由用户在程序中通过动态分配获取的。使用动态内存分配能有效地使用内存,同一段内存区域可以被多次使用,使用时申请,用完就释放。

在使用动态内存分配函数时,要包含头文件<stdio.h>

1.动态存储分配函数malloc()

函数原型是void *malloc(unsigned size)

在内存的动态存储去中分配一连续空间,其长度为size。若申请成功,则返回指向所分配内存空间的起始地址的指针;若申请内存不成功,则返回NULL(值为0)。malloc()的返回值为(void * )类型。在具体使用中,将malloc()的返回值转换为特定指针类型,赋给一个指针。

2.计数动态存储分配函数calloc()

该函数实现在内存的动态存储区中分配n个连续空间,每一存储空间的长度为size,并且分配后还把存储块里全部初始化为0。

要注意该函数原型是void *calloc(unsigned n,unsigned size),与malloc()函数不一样

3.动态存储释放函数free()

函数原型是void free(void * ptr)

该函数实现释放由动态存储分配函数申请到的整块内存空间,ptr为指向要释放空间的首地址。如果ptr的值是空指针,则free什么都不做。该函数无返回值。

为了保证动态存储区的有效利用,在知道某个动态分配的存储块不再用时,就应该及时将它释放。

4.分配调整函数realloc()

函数原型是void *realloc(void *ptr,unsigned size)

该函数可以更改以前的存储分配。ptr必须是以前通过动态存储分配得到的指针。参数size为现在需要的空间大小。如果分配失败,返回NULL,同时原来ptr指向存储块的内容不变。如果成功,返回一片能存放大小为size的区块,并保证该块的内容与原块的一致。如果size小于原块的大小,则内容为原块前size范围内的数据;如果新块更大,则原有数据在新块的前一部分。如果分配成功,原存储块的内容就可能改变了,因此不允许再通过ptr去使用它。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。