C语言-动态内存分配总结

1 malloc

void *malloc( unsigned int num_bytes) 

分配长度为num_bytes个字节的内存块,返回值为无类型指针,该指针指向所分配内存块的起始位置,因此利用该无类型指针赋值给其他类型的指针的时候,需要进行强制类型转换。

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

当内存分配失败时,返回空指针NULL。在使用malloc 分配内存之后,进行NULL判断是一个良好的编程习惯。

2 calloc

void *calloc( unsigned int num, unsigned int size)

在内存的动态存储区分配num个长度为size的存储块,返回指向该存储块起始地址的无类型指针,若返回失败,返回NULL。因此,同样需要对该函数返回值进行判断。

int *p = (int *)calloc(20, sizeof(int));

区别联系

  • callocmalloc的一个相同点在于使用之后均需要free(指针),释放内存块。
  • 不同点在于calloc分配内存之后,会自动将这一块的内存之初始化为0,而malloc则不会,分配内存的值为一些垃圾数值。因此,在使用malloc函数之后,我们一般要调用函数memset对内存进行初始化。

3 memset

void *memset(void *s, int ch, unsigned int size) 

s所指向的内存块的前size个字节全部设置为ch对应的ASCii值。 它是对较大数组或者结构体清零操作的最快方式。

memset(p, 0, 80);

4 realloc

void *realloc (void *p, unsigned int size);

如果已经通过malloc或者calloc获得了动态空间,想改变其大小,可以使用realloc函数重新分配,将p所指的动态空间大小改变为size,而p的值不变,如果重新分配不成功,返回NULL。原来空间的内容会保留。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值