一、有哪些扩容函数
当我们在使用结构体需要空间时我们就会使用到关于扩容方面的知识接下来我就介绍在C语言中的三个比较使用的扩容函数分别是malloc、calloc、realloc函数以及扩容函数的一些使用方法。
malloc函数介绍
malloc函数是存放在堆区的函数,表现形式是void*malloc(size_t size)其中使用void是方便函数的调用以及书写,其中size的是以字节为单位。
常用的方法是如下:
int *a=(int *)malloc(30*sizeof(int));
malloc的使用原理是向内存申请一个连续的空间如果内存中有需要的内存空间就会返回内存的指针
反之就会返回空指针。所以在使用的时候常常要加上if条件用来判断返回的指针是否为空。
使用完后的空间要释放用free函数释放,但不释放操作系统也会释放。
calloc函数介绍
calloc函数堆区的函数之一,表现形式是void*calloc(size_num,size_t size)其中num是个数,size是你要的类型单位是字节,void的原因是方便自己所写函数返回的形式。
常理的使用方法与malloc一致,请参考malloc函数。
与malloc的区别是:calloc会在初始化的时候把空间全都初始化为0。
同理使用完要用free释放。
realloc函数介绍
ralloc是动态函数所以是在堆区,是用来调整内存空间的函数表现形式是void*realloc(void*ptr,size_t size)其中ptr是一个你想要改变空间的指针,第二个是你要改变后的字节。
输入更改的字节后如果有足够的空间就会在原有的基础上扩容,没有足够空间就会去找符合你需要的空间,找到符合空间后这个函数会把你在之前空间写的复制并放入新空间。
常理的使用方法如下:
SLDataType* tmp = realloc(ps1->a, sizeof(SLDataType) * newCapacity);
但是如果需要的空间太大就会返回一个空指针,但不会释放参数指向的内存块(它仍然有效,并且其内容保持不变)。
注意:使用空指针去扩容就会和malloc的使用效果一样。