C语言奇妙之旅_指针动态内存分配

为什么需要动态分配内存

  • 动态数组很好的解决了传统数组的4个缺陷。
  • 传统数组也叫静态数组。

 

传统数组的4个缺陷

 1) 数组的长度必须先制定, 且只能是常数不能是变量。

 2) 传统形式定义的数组, 该数组的内存无法手动释放。

3) 数组的长度一旦定义, 其长度就不能在更改。

4) A函数定义的数组, 在A函数运行期间可以被其他函数使用,

          但A函数运行完毕之后, A函数中的数组将无法在被其他函数使用。

 

动态内存分配举例_构造动态数组

int * p = (int *)malloc(int len);   

 本语句分配了两块内存, 一块内存是动态分配的, 总共len个字节, 另一块是静态分配的。 并且这块静态内存是p变量本身所占的内存, 总共4个字节。

 

以下是复制的  ̄□ ̄||

https://blog.csdn.net/weixin_40123831/article/details/80255012

malloc和free

malloc和free 这两个函数分别用于执行动态内存分配和释放。这些函数维护一个可用内存池,当一个程序需要另外

一些内存时,它就调用malloc函数,malloc函数从内存中提取一块合适的内存,并向程序返回一个指向这块内存的指针。

程序调用free函数把它归还给内存池。

 

calloc和realloc

注意:

(1)calloc也用于内存分配,区别在于calloc在返回值指向内存的指针之前把它初始化为0;

calloc的参数包括所需元素的数量和每个元素的字节数。

(2)realloc函数用于修改一个原先已经分配的内存块的大小,使用这个函数可以使一块内存放大或者缩小

如果realloc函数的第一个参数是NULL,那么它的行为就和malloc一样。

如果原先的内存块无法改变大小,realloc将分配另一块正确大小的内存,并将原先那块内容复制到新的块上,因此,在使用realloc之后,就不能再使用指向就内存的指针,而是应该改用realloc所返回的指针。

 

比较好的 -> https://blog.csdn.net/SpeedMe/article/details/26155855

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值