首先我先介绍一下开劈动态内存的作用和好处,也就是为什么要有这个东西,大家都知道一般的定义数组的话在程序开始执行的话就已经固定无法改变,比如:如果想要定义整型变量n要开劈n个int类型的空间,显然传统方法是做不到的,那么就需要动态内存开劈来处理了(如果开辟n个int类型空间,只需要把下面例子中的10变为n即可)。学过c语言的人应该都知道利用c语言开劈动态内存的方式是使用函数malloc,calloc,realloc,这些函数的使用方法如下(以下只介绍数组的开辟和释放,单个变量的方法类似):

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

这段代码表示在堆上开劈10个int类型的内存空间,不初始化,并且返回第一个位置的地址给指针变量p,使用时有两种方法:

for(int i=0;i<10;i++)

{

p[i]=i;//或者*(p+i)=i;

}

这两种方法都可以访问刚才开劈的空间,来改变内存中的值。

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

这段代码表示在堆上开劈10个int类型的内存空间,初始化每个值为0,并且返回第一个位置的地址给指针变量p,使用时有两种方法同上。

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

这段代码表示把刚才在堆上开劈10个int类型的内存空间给改变了扩展为20个int类型的内存空间,并且刚才赋值的前面内存空间的元素的值不变,如果在刚才开劈的空间后不足40个空间,那么则会另找一个内存足够装下这个范围的空间,把这个空间的值拷贝过去,并且删除这个空间,然后返回第一个位置的地址给指针变量p。

也可以用realloc来开劈动态内存,代码如下:

int *p=(int*)realloc(NULL,20*sizeof(int));

注意一点,可能也会分配失败,那么则会返回空指针NULL,所以在使用前要判断是否开劈成功,代码如下:

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

if(p==NULL)

return 0;

for(int i=0;i<10;i++)

{

p[i]=i;

}

free(p);

p=NULL;

动态内存开劈完后内存空间并不会销毁,要么用free(p);来删除刚开劈的空间,并在后面把p=NULL;来防止p为野指针改变所指向的内容造成不必要的错误;

以上刘为c语言的动态内存开劈的内容,坐着很用心地去教会初学者,如果觉得写的好的话,可以给个关注点个赞,可以向我提问,我会认真回答,日后有什么不懂,想要更新的,也可以私我或在评论区评论,你的关注和点赞是我的动力,谢谢各位!

c语言开劈动态内存的操作以及相关知识相关推荐

  1. c语言链表内存分配失败,链表的C语言实现之动态内存分配

    链表的C语言实现之动态内存分配 來源:互聯網  2008-06-01 02:05:07  評論 一.为什么用动态内存分配 但我们未学习链表的时候,假如要存储数量比较多的同类型或同结构的数据的时候,总是 ...

  2. c语言链表动态分配内存,链表的C语言实现(含动态内存分配)

    转自:http://blog.csdn.net/21aspnet/article/details/146968 链表的C语言实现(含动态内存分配) 上 链表的C语言实现之动态内存分配 一.为什么用动态 ...

  3. C语言中的动态内存分配

    大家好,今天简单讲一讲C语言中的动态内存分配. 补充:C程序中的内存块. 在C程序中,通常将内存划分为以下六个区域: (1)内核区域.这块区域是操作系统的,用户不能使用. (2)栈区.主要用于存放运行 ...

  4. c语言十七:动态内存申请

    动态内存申请 一 动态内存申请 二 静态分配内存和动态分配内存 2.1 静态分配内存 2.2 动态分配内存 三 动态内存申请的相关函数 3.1 分配内存空间函数 malloc 3.2 free函数 ( ...

  5. C语言 :学习动态内存分配

    文章目录 C语言动态分配 为什么存在内存分配? 动态内存函数的介绍 `malloc` `free` `free`函数的**作用原理**是: 使用后将指针赋为`NULL` `calloc` 运用一次`c ...

  6. c语言 malloc_C语言快速入门——动态内存分配

    在前面一系列的字符串操作中,我们都是先定义一个固定大小的字符数组,然后根据所需,或拷贝.或连接.或格式化来为这个数组提供内容.固定大小的数组意味着在程序运行期间,数组所占用的内存是确定的(即划分了固定 ...

  7. SylixOS动态内存分配操作

    SylixOS 系统内存管理分为两大类: 内存堆管理和虚拟内存管理. 对用户来说内存堆管理的分配最小单位为 1 个字节, 虚拟内存管理分配最小单位为 1 个页面(通常为 4096 字节) 内核部分 操 ...

  8. c语言的四个函数,C语言学习之动态内存分配的四个函数

    前面中我们了解到: int n; int arr[n]; 这样定义数组是不可取的,不能用此方法给数组分配动态内存,那怎么样才能实现这种可能呢? 接下来我将关于动态内存的知识做以下总结. 有关动态内存的 ...

  9. C语言学习笔记---动态内存分配

      数组在内存中时存储在连续的位置上,当声明一个数组的时候,编译器就会在内存中分配它所需要的空间,但是有时候还需要使用动态内存为数组分配空间.   比如现在要同统计一个班级学生的成绩,可以申请一个固定 ...

最新文章

  1. jsp开发,拼接项目前缀
  2. 一分钟详解OpenCV之相机标定函数calibrateCamera()
  3. 水波纹效果,附工程源码
  4. hibernate工厂模式_Hibernate锁定模式–乐观锁定模式如何工作
  5. Java学习、简单代码编译
  6. Flutter 基础篇-所有知识点架构
  7. 【渝粤教育】广东开放大学 hadoop数据管理 形成性考核
  8. 这也许是你不曾留意过的 Mybatis 细节 1
  9. 微软开源可解释机器学习框架 interpret 学习实践
  10. 写给自己的CDSN账号
  11. 正解:《Java 程序员的黄金 5 年》看完我才知道当时有多蠢
  12. (转载)积分/C币的获取方式
  13. 软件工程自学笔记一(基础篇)
  14. 智能远程监督系统解决方案
  15. 权限管理系统,可以这么设计
  16. hdu 5455 Fang Fang
  17. Windows10开机之后进BIOS
  18. win10 iso安装包中的两个setup.exe如何使用
  19. 三校生高考计算机基础知识,计算机基础知识题(单选题)(三校生历年高考真题归纳)...
  20. 《人生效率手册》读后感

热门文章

  1. 德国大众跃居世界第一大汽车生产商
  2. 小程序能用vue写么_仿网易云音乐APP的微信小程序【小程序和Vue版本】
  3. 【HTML】- 鼠标悬停图片时切换查看器
  4. moviepy音视频剪辑:与time时间线相关的变换函数freeze_region、make_loopable、speedx、time_mirror、time_symmetrize介绍
  5. 企业即时通信软件有哪些?要如何选择?
  6. mysql 两条sql合并_两条查询SQL的语句的数据合并到一起
  7. 高通WiFi方案CLPC方法说明
  8. Android Volatile 关键字学习
  9. css3 clip-path属性
  10. 获取DedeCMS当前文章页的本文地址URL地址方法