malloc,calloc和realloc

C语言在进行动态内存时常会用到的三个函数分别是malloc,calloc和realloc。

malloc函数原型为:void  *malloc(size_t size);

malloc的作用用于在内存中开辟连续的size个字节,并返回该内存块的起始地址,如果开辟内存失败,则返回NULL指针。

通常情况下,直接写出size为多少有些不太方便,这样的程序也不方便移植。如:

int *p=malloc(100);  // 开辟一个100个字节的内存块,用于存放int类型变量。

你会发现上面的这句代码在32位机器和16位机器上所开辟出来相同大小的内存中可以存放的int类型变量个数是不同的,这就给移植程序带来了不便,因此一般不这样申请内存。

还有一种写法如下:

int *p=malloc(25*sizeof(int));

上面这一句代码无论是在32位机器还是在16位机器中所开辟出来的内存所能存放的int类型的变量数量都是25个,方便移植。

calloc函数原型:void *calloc(size_t num_elements,size_t element_size);

calloc和malloc的区别是calloc会把返回的指针初始化为0.另一个区别就是函数参数不同:num_elements是元素数量,element_size是元素大小(字节).

realloc函数原型:void realloc(void *ptr,size_t new_size);

realloc用于修改原先已经分配好的内存块的大小。

如果新内存比原来的内存大,则会在原来内存的后面开辟一块新的内存。

如果新内存比原来的内存小,则拿掉尾部多余的部分,保留的部分内容不变。

如果原来的内存不可改变,realloc将分配另一块正确大小的内存,并把原来那块内存的内容复制到新的内存上。

使用realloc后,应改用realloc返回的指针而不是原来的指针。

如果ptr是空指针,则realloc的作用和malloc一样。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值