c语言-动态内存

为什么要使用动态内存?


静态数组存在的问题:1.不能根据变量n动态申请内存

                                     2.不能申请大块内存

动态内存:
    1.动态内存有什么用?
       1.1:可以根据变量n动态申请数组   
    2.怎么使用动态内存?
      2.1:malloc(90%):申请动态内存(从堆内),有可能失败,返回NULL(1.堆内空间不够 2.堆内空间足够,但是连续空间不够)
      2.2:calloc(1%): 在malloc的基础上,将初始值全部变成0   
      2.3:realloc(9%)  重新从堆内申请动态内存
    3.为什么要释放动态内存?(防止内存泄露)
    4.注意事项?
        4.1: malloc的时候,前面的强转和后面的sizeof内的类型不一致,sizeof里面没有*星号
        4.2:calloc注意,两个参数不要写反
        4.3:realloc注意:第一个参数需要填写原先内存的开头地址
                         第二个参数需要的是重新开辟的总字节数,不是在原先内存的基础上扩充的字节数

malloc代码示例:


int* p1 = (int*)malloc(10 * sizeof(int));  //x*y  x:申请空间个数 y:申请空间单个大小

char* p2 = (char*)malloc(20 * sizeof(char));

double* p3 = (double*)malloc(100 * sizeof(double));
	

realloc代码示例:

    //在上面malloc的基础上都扩容两倍

	p1 = (int*)realloc(p1, 10 * sizeof(int) * 2);

	p2 = (char*)realloc(p2, 2 * 20 * sizeof(char));

	p3 = (double*)realloc(p3, 2 * 100 * sizeof(double));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值