首先我先介绍一下开劈动态内存的作用和好处,也就是为什么要有这个东西,大家都知道一般的定义数组的话在程序开始执行的话就已经固定无法改变,比如:如果想要定义整型变量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. 2018全球技术展望报告
  2. 系统已有MYSQL环境,如何安装宝塔面板
  3. DataTable转Csv,Excel(转)
  4. 有哪些网站社区可以看原创平面设计大师作品?
  5. html5光标进去默认值消失,html点击input没有出现光标怎么办
  6. 在线坐标系经纬度转换工具
  7. 【Windows10】利用分区助手扩展C盘分区
  8. Mac 安装Yarn
  9. Recovery文件路径
  10. 王者荣耀苹果微信哪个服务器最强,王者荣耀:国服最高战力!这三个英雄最高战力比拼ios微信区完胜...
  11. SQL“除非另外还指定了 TOP、OFFSET 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效“ 解决方法
  12. java计算机毕业设计重庆旅游景点源码+数据库+系统+lw文档
  13. HashMap的fast-fail和ConcurrentHashMap的fail-safe实例
  14. Almeida–Pineda algorithm
  15. android camera噪点,拍照时总是有很多噪点怎么办?方法很简单但你还真不知道
  16. 数据库与身份认证:在项目中操作 MySQL
  17. 分布式锁-redis、zookeeper优缺点
  18. Vue项目开发中使用路由懒加载
  19. 引入超融合技术解决虚拟机性能不足问题
  20. 【Python测试】期末测试

热门文章

  1. 2008年的各个节日
  2. section、article、aside区别及HTML5语义化标签
  3. Java入门教程笔记03(程序流程控制)
  4. Qt 构建和解析Json格式数据
  5. 【Arthas】使用 watch命令 线上诊断
  6. JS简单实现京东图片放大镜效果
  7. 10G数据,1G内存,如何排序?
  8. 20年架构师带你彻底搞懂查询分离的实现思路
  9. 蓝牙耳机什么牌子的好又实惠?便宜又好用的蓝牙耳机推荐
  10. SFDC:Plural Label无法设置