16.从零开始学习C语言--动态内存分配

数组的缺陷:

1、数组长度必须事先定义,只能为常整数,定义后无法更改;

2、数组占用内存,无法手动释放,直到数组所在函数执行完毕;

3、函数内的数组,一旦函数执行完毕后,则不能在其它函数中使用,即数组不能跨函数使用;

其实,数组所存在的问题就是静态内存的问题,通过动态分配数组可以很好的解决上述问题。


malloc函数:

函数名:malloc

头文件:malloc.h

功能:内存分配

用法:(void*)malloc(unsigned size);

返回:所分配内存空间的第一个内存单元的地址

例子:int *p = (int*)malloc(4)


构造动态一维数组:

int *p = (int*)malloc(len);len是个int型变量。

请求系统分配len个字节的内存空间,并把空间第一个字节的内存地址转化成int型地址,然后赋给p。

结合数组下标和指针的概念,就相当于动态造了一个名为p,长度为len/4的int型数组(因为int型占个4个字节,所以长度为len/4)。

补:把第一个内存地址转化成int型,就表示第一个内存地址指向了连续的4个字节(因为int型占4个字节),赋值给p后,p就指向第一个连续的4个字节,p+1指向第二个的4个字节,换句话说就是把这段空间按四个字节为单位划分,每四个字节中的第一个字节的内存地址就指向它所在的四个字节,这同样也是下标的本质。


静态内存与动态内存的比较:

静态内存由系统自动分配,由系统自动释放,静态内存是在栈中分配的。

动态内存由程序员手动分配,手动释放(所以要注意内存泄露),动态内存是在堆中分配的。


调整已分配动态内存大小:

函数名:realloc

头文件:malloc.h

功能:重新分配内存

用法:(void*)relloc(void* ptr, unsigned size)

例子:int *p = (int*)realloc(p, 100);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值