蚂蚁文库
换一换
首页 蚂蚁文库 > 资源分类 > DOCX文档下载
 

C语言变量的存储类别

  • 资源ID:53132164       资源大小:97.15KB        全文页数:15页
  • 资源格式: DOCX        下载权限:游客/注册会员    下载费用:10积分 【人民币10元】
快捷注册下载 游客一键下载
会员登录下载
三方登录下载: 微信快捷登录 QQ登录  
下载资源需要10积分 【人民币10元】
邮箱/手机:
温馨提示:
支付成功后,系统会自动生成账号(用户名和密码都是您填写的邮箱或者手机号),方便下次登录下载和查询订单;
支付方式: 微信支付    支付宝   
验证码:   换一换

 
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,既可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰   

C语言变量的存储类别

C语言变量的存储类别 内存中供用户使用的存储空间分为代码区与数据区两个部分。变量存储在数据区, 数据区又可分为静态存储区与动态存储区。 静态存储是指在程序运行期间给变量分配固定存储空间的方式。如全局变量存放在 静态存储区中,程序运行时分配空间,程序运行完释放。 动态存储是指在程序运行时根据实际需要动态分配存储空间的方式。如形式参数存 放在动态存储区中,在函数调用时分配空间,调用完成释放。 对于静态存储方式的变量可在编译时初始化,默认初值为。或空字符。对动态存储 方式的变量如不赋初值,则它的值是一个不确定的值。 在C语言中,具体的存储类别有自动auto、寄存器register、静态static及外部 extern四种。静态存储类别与外部存储类别变量存放在静态存储区,自动存储类别变量存 放在动态存储区,寄存器存储类别直接送寄存器。 变量存储类别定义方法 存储类别类型变量表; 例如 1 a, b, c为整型自动存储类别变量 auto int a, b, c; 2 x, y, z为双精度型静态存储类别变量 static double x, y, z 1、变量有哪些存储类型 变量的存储类型由“存储类型指明符”来说明。存储类型指明符可以是下列类键字之一 auto register extern static 下面是详细的解释 auto存储类指明符一一用于说明具有局部作用域的变量,它表示变量具有局部自动 生成期,但由于它是所有局部作用域变量说明的缺省存储类指明符,所以使用得很少。要注 意的是,所有在函数内部定义的变量都是局部变量,函数内部定义的变量其作用域只在函数 内部。它的生存期为该函数运行期间,一旦离开这个函数或这个函数终止,局部变量也随之 消失。 register存储类指明符一一当声明了这个指明符后,编译程序将尽可能地为该变量分 配CPU内部的寄存器作为变量的存储单元,以加快运行速度。注意,寄存器与存储器是不 同的。寄存器一般在CPU内部,而存储器一般指外部的比如内存条,CPU内部的寄存 器其运算速度是很高的。当寄存器已分配完毕,就自动地分配一个外部的内存。它的作用等 价于auto,也只能用于局部变量和函数的参量说明。 static存储类指明符一一表示变量具有静态生成期。static变量的的特点是它离开了其 作用域后,其值不会消失。 当回到该作用域之后又可以继续使用这个static变量的值。 例利用static变量统计调用函数的次数 int two; /*函数原型说明*/ void main int a0; atwo; /*a 的值等于 17 atwo /*a的值等于27 atwo; /*a 的值等于 37 int two static int b0;/*定义了一个局部的 static 变量*/ b; return b; 如果不是一个static变量就不会有这个效果了 int two; /*函数原型说明*/ void main int a0; atwo; /*a 的值等于 17 atwo /*a 的值等于 1*/ atwo; /*a 的值等于 17 int two int b0; b; return b; 变量a的值总是1,原因是在函数two中,变量b不是一个static变量,其值随着离 开two函数就消失了,当回到two函数时又被重新赋值0。 extern存储类指明符般用在工程文件中。在一个工程文件中因为有多个程序文 件,当某一个变量在一个程序文件中定义了之后,如果在另一个程序文件中予以定义,就会 出现重复定义变量的错误。使用extern存储类型指明符就可以指出在该文件外部已经定义 了这个变量。extern变量的作用域是整个程序。 2、变量存储在内存的什么地方 1 变量可以存储在内存的不同地方,这依赖于它们的生成期。在函数上部定义 的变量全局变量或static外部变量和在函数内部定义的static变量,其生存期就是程序 运行的全过程。这些变量被存储在数据段Data Segment中。数据段是在内存中为这些变 量留出的一段大小固定的空间,它分为二部分,一部分用来初始化变量,另一部分用来存放 未初始化的变量。 2 在函数内部定义的auto变量没有用关键字static定义的变量的生成期从 程序开始执行其所在的程序块代码时开始,到程序离开该程序块时为止。作为函数参数的变 量只在调用该函数期间存在。这些变量被存储在栈stack中。栈是内存中的一段空间,开始 很小,以后逐渐自动变大,直到达到某个预定义的界限。 3 当用malloc等函数给指针分配一个地址空间的时候,这个分配的内存块位于 一段名为堆heap ”的内存空间中。堆开始时很小,但调用malloc或clloc等内存分配函 数时它就会增大。堆可以和数据段或栈共用一个内存段,也可以有它自己的内存段,这完全 取决于编译选项和操作系统。与栈相似,堆也有一个增长界限,并且决定这个界限的规则与 栈相同。 C语言变量的作用域和存储类型 一、作用域和生存期 C程序的标识符作用域有三种局部、全局、文件。标识符的作用域决定了程序 中的哪些语句可以使用它,换句话说,就是标识符在程序其他部分的可见性。通常,标识符 的作用域都是通过它在程序中的位置隐式说明的。 1. 局部作用域 前面各个例子中的变量都是局部作用域,他们都是声明在函数内部,无法被其 他函数的代码所访问。函数的形式参数的作用域也是局部的,它们的作用范围仅限于函数内 部所用的语句块。 void addint; main int num5; addnum; printfd\n,num;/*输出 57 void addint num num; printfd\n,num; /*输出 6*/ 上面例子里的两个num变量都是局部变量,只在本身函数里可见。前面我们说 了,在两个函数出现同名的变量不会互相干扰,就是这个道理。所以上面的两个输出,在主 函数里仍然是5,在add函数里输出是6。 2. 全局作用域 对于具有全局作用域的变量,我们可以在程序的任何位置访问它们。当一个变 量是在所有函数的外部声明,也就是在程序的开头声明,那么这个变量就是全局变量。 void addint; int num; main int n5; addn; printf”%d\n”,num; /*输出 67 void addnum/*形式参数没有指定类型*/ { num; printfd\n,num; /*输出 67 上面的main和add里面,并没有声明num,但是在最后输出的时候却要求输出 num,这是由于在程序的开始声明了 num是全局变量,也就是在所有函数里都可以使用这 个变量。

注意事项

本文(C语言变量的存储类别)为本站会员(aaakkpc)主动上传,蚂蚁文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知蚂蚁文库(发送邮件至2303240369@qq.com或直接QQ联系客服),我们立即给予删除!

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




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


网站客服QQ:2303240369

copyright@ 2017-2027 mayiwenku.com 

网站版权所有  智慧蚂蚁网络

经营许可证号:ICP备2024020385号



收起
展开