C语言动态存储分配函数

由系统自动进行类型转换。原文链接:http://www.hackbase.com/tech/2009-02-02/44968.html

 

 

真正实现动态存储分配,除了利用含指针成员的结构体之外,还需利用C语言提供的几个标准库函数。(使用时应包含头文件“alloc.h”或“malloc.h”或“stdlib.h”)

1.malloc函数:开辟指定大小的存储空间,并返回该存储区的起始地址。函数原型为
void *malloc(unsigned int size)


其中size为需要开辟的字节数。函数返回一个指针,该指针不指向具体的类型,当将该指针赋给具体的指针变量时,需进行强制类型转换。若size超出可用空间,则返回空指针值NULL。
例如

float *p1;
int *p2;
p1=(float *)malloc(8);
*p1=3.14;
*(p1+1)=-3.14;
p2=(int *)malloc(20*sizeof(int));
for(i=0;i<20;i++)
 scanf(“%d”,p2++);

分别开辟了8字节和20×2字节的存储空间,并向其中存入数据。

2. calloc函数:按所给数据个数和每个数据所占字节数开辟存储空间。函数原型为
void *calloc(unsigned int num, unsigned int size)


其中num为数据个数,size为每个数据所占字节数,故开辟的总字节数为num*size。函数返回该存储区的起始地址。
例如 上例中p2可改写为
p2=(int *)calloc(20, sizeof(int));
例如
calloc(10,20)
可开辟10个且每个大小均为20字节的存储空间。

3. realloc函数:重新定义所开辟内存空间的大小。函数原型为
void *realloc(void *ptr, unsigned int size)


其中ptr所指的内存空间是用前述函数已开辟的,size为新的空间大小,其值可比原来大或小。函数返回新存储区的起始地址(该地址可能与以前的地址不同)。例如
p1=(float *)realloc(p1,16);
将原先开辟的8个字节调整为16个字节。

4. free函数:将以前开辟的某内存空间释放。函数原型为
void free(void *ptr)


其中ptr为存放待释放空间起始地址的指针变量,函数无返回值。应注意:ptr所指向的空间必须是前述函数所开辟的。例如
free((void *)p1);
将上例开辟的16个字节释放。可简写为
free(p1);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值