欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > PPTX文档下载
 

轻松学C语言之动态内存管理以及变量的

  • 资源ID:20853788       资源大小:1.03MB        全文页数:32页
  • 资源格式: PPTX        下载积分:9.9积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要9.9积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

轻松学C语言之动态内存管理以及变量的

C语言中,动态内存分配也就是在程序运行中实时申请内存分配。这有利于我们对任意多的数据进行处理。如果这些数据不用了,我们也可以随时释放。对于变量的存储有4种存储类别:auto(自动)、register(寄存器)、static(静态)和extern(外部)。本章主要讲解动态内存管理以及变量的4种存储类别。 C语言中,只运行使用系统分配的内存,如果系统没有为变量分配内存,那么会出现什么情况呢?如图13.1所示。 缺点说明数组的大小是固定的所以它所占的空间在内存分配之后的运行期间是不能改变的,所以这样就要求我们事先为其分配较大的空间,保证程序运行时不会溢出 数组需要一块连续的内存空间如果对于一个系的各班定义一个数组,每个班的学生个数不一定相同,那么就很难定义数组的长度。过大会造成资源的浪费,过小又会造成溢出,影响程序的运行 当我们要进行动态内存分配时,我们首先要进行内存分配。当程序对分配的内存空间执行完毕后,我们要将分配的空间释放掉,从而提高了内存空间的利用率。但是,当我们分配的内存不够使用时,我们需要重新分配存储空间。本节主要讲解怎样解决这一系列的问题。 我们使用动态存储区域分配存储空间可以使用以下2个函数实现:malloc()函数、calloc()函数。 实现动态存储区域分配空间的函数malloc(),其调用形式以及参数说明如图13.4所示。 calloc()函数实现在内存的动态存储区域中分配n个长度为size的连续存储空间。它的调用形式以及说明如图13.6所示。 当动态分配的存储空间已经不再被使用时,我们应该释放掉它,把它交还给系统,使系统可以重新对其分配。C语言中,对于释放动态分配的存储空间我们使用free()函数,其调用形式以及说明如图13.9所示。 如果我们对动态分配的存储空间不合适,可以使用realloc()函数重新分配动态存储空间,其调用形式以及说明如图13.12所示。 注意点解释重新分配后的空间新地址位置新的首地址不一定与原来定义的首地址相同,因为为了增加空间,存储区会进行必要的移动重新分配后的空间回收由realloc()函数分配的空间,也可以利用free()函数回收,以避免内存空间的浪费 前面所讲的是关于内存动态分配空间,而在在程序设计中我们是直接指定了分配内存大小空间。但是这样不利于程序的可移植性,因为在不同的计算机系统中,统一数据类型所占用的内存空间不一致,为了解决这个问题,C语言提供了一个判断数据类型长度的操作符sizeof。sizeof对于数据类型的操作如图13.14所示。 C语言中,每一个变量和函数都有两个属性:数据类型和存储类别。数据类型大家已经熟悉,存储类别是数据在内存中存储的方式。存储方式分为两大类:动态存储类与静态存储类。具体包含4种:自动的(auto)、静态的(static)、寄存器的(register)、外部的(extern)。根据变量的存储类别,可以知道变量的作用域和生存期。 内存中的供用户使用的存储空间可以分为三部分,如图13.16所示。 存储类别存放的数据存储空间的分配与释放存储单元静态存储全局变量全部存放在静态存储区。在程序执行开始时给全局变量分配存储区,程序执行完毕就释放。数据占的存储单元是固定。动态存储函数的形式参数、自动变量(未加static声明的局部变量,在后面的章节中会讲到)、函数调用时的现场保护和返回的地址。在函数调用时对数据动态分配存储空间,函数结束时释放空间。数据所占的存储单元根据需要分配。 静态局部变量的含义如图13.18所示。 函数中的局部变量如果声明为非static存储类别的,都是动态的分配存储空间的,这类变量也就是本节所讲的自动变量。对于自动变量的声明,我们可以使用auto关键字声明,也可以省略关键字。如果省略关键字,那么隐含意思也是自动变量。如图13.20所示。 局部变量类别存储类别初始值默认值静态局部变量静态存储类别,在静态存储区内分配存储单元,在程序整个运行期间都不释放在编译时赋初始值如果在定义时不赋初始值,编译时自动赋初始值0(对数值型变量)或空字符(对字符变量)动态局部变量动态存储类别,占用动态存储区空间,函数调用结束时立即释放在函数调用时执行一次赋值语句如果在定义时不赋初始值,则它的值是一个不确定的值 一般情况下,变量是存储在内存中的,存数与取数主要是和运算器打交道的,如图13.22所示。 只有局部变量和形式参数可以作为寄存器变量一个计算机系统中的寄存器变量的数目是有限的,不能定义任意多个寄存器变量局部静态变量不能定义为寄存器变量,因为一个变量只能声明为一种存储类别 大家已经知道外部变量是在函数的外部定义的全局变量,它的作用域是从变量的定义处开始到程序执行结束。那么,如果想在外部变量定义之前使用该外部变量该怎么办呢?C语言中使用extern关键字声明外部变量来解决这个问题,从而扩展了外部变量的作用域。 如果我们想在外部变量定义之前的函数中使用该外部变量,则应该使用关键字extern对变量作“外部变量声明”,表示该变量是一个已经定义的外部变量,extern声明外部变量的形式如图13.25所示。 如果程序有多个源文件组成,那么在一个文件中想引用另一个文件中定义的外部变量,我们该怎么处理呢?C语言中,使用如下做法解决:在任意一个文件中定义该外部变量,在另一个文件中用extern作“外部变量声明”。下面来举例说明这种情况对外部变量的引用。 在一个由多个文件组成的源程序中,如果其它文件不需要引用本文件的外部变量,可以对文件中的这些变量都加上static,使这些变量称为静态外部变量,以免被其它文件误用。如图13.28所示。 本章主要讲解了动态内存管理以及变量的存储类别,重点是动态内存管理中的存储区域空间的分配以及释放,sizeof操作符在内存分配空间中的使用,静态存储方式与动态存储方式的区别,静态局部变量、自动变量、寄存器变量、extern声明外部变量与static使用。希望大家在编程的过程中熟练掌握。

注意事项

本文(轻松学C语言之动态内存管理以及变量的)为本站会员(san****019)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!