第6节程序结构.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章 程序结构 第一节 变量的存储类型 内存存储区 (第5章) 内存分配方式 变量的存储类型声明及存储区域 auto变量 计算机对变量的操作 register变量 extern变量 extern变量的作用 静态全局变量 静态函数 第二节 作用域和生存期 作用域和生存期 例 可见性 p111 作用域限定符 (::) p111 第三节多文件结构 源文件和头文件 p114 多文件 例 ch6_5 第四节 编译预处理指令 #include文件包含指令 为什么要使用 #include指令? #define宏定义指令 例如,编程时可以首先将一个数组的最大长度定义成一个宏 带参数的宏定义 宏与内联函数的区别 条件编译指令 条件编译指令的三种形式 例 使用条件编译指令 #ifdef指令的用法 编程提示 * C/C++语言中的变量都有两个属性:数据类型和存储类别。 数据类型在第2章已经详细讨论过,本节将讨论变量的存储类别。 C/C++语言中定义了4个关键字作为变量的存储类别的修饰词,分别为:auto(自动)、static(静态)、register(寄存器)和extern(外部)。 变量的存储类别决定了变量在内存中的存储区域。 代码区:程序代码 全局数据区:全局和静态数据 堆区:动态数据 栈区:函数中形参和局部数据 C/C++内存分配方式有三种: 自动分配、静态分配和动态分配。 自动分配:程序运行后,系统为程序开辟一块称为栈的活动存储区。在栈中为变量临时分配空间。程序运行后,在变量作用域开始时由系统自动分配内存,在作用域结束后即释放内存。 静态分配:系统为每个程序开辟一个固定的静态存储区。程序开始执行时变量就占用内存,直到程序结束时变量才释放内存。 动态分配:称为堆的内存,处于栈和静态存储区之外的自由存储单元。完全由程序自身控制内存分配和释放。 在声明变量时可以制定变量的存储类型,形式如下: 存储类型 数据类型 变量名列表; 如: auto inr a; static float b,c; 变量的4种存储区域 : auto ——栈,内部变量隐含类型 register ——寄存器 extern ——静态存贮区,外部变量隐含类型 static ——静态存贮区 所有的局部变量的声明中如果不含存储类别,那么都默认为auto型变量。如下函数中的两种声明方式是等效的。 /* 声明方式1 */ int fun(auto int arg1, auto double arg2) { auto int a = 1; auto int b = 1; …… } /* 声明方式1 */ int fun(int arg1, double arg2) { int a = 1; int b = 1; …… } 所有变量的值都是存储在内存中的,而计算机的直接操作对象是寄存器。寄存器是CPU内部的元件,寄存器拥有非常高的读写速度,所以在寄存器之间的数据传送非常快。当程序访问变量时,计算机要先从内存中将变量值提取到寄存器中。运算结束后,如果该变量值发生改变,则还需要把寄存器中的值重新送回到内存存放。 C/C++语言中提供了一种存储类别register,这种存储类别的变量的值会被要求直接存储在寄存器中。访问该变量无需从内存中获取它的值,存储该变量时也无需再存回内存,都直接在寄存器上进行操作。由于寄存器的存取速度要远快于内存的存取数度,因此,如果一个该变量在程序中被频繁使用,那么将其声明为register变量,将大大提高程序的执行效率。register型的变量声明如下所示: register 数据类型名 变量名; register变量的使用要注意: register只能修饰函数内的变量,包括局部变量和形式参数;一个变量只能声明为一种存储类别;也不能进行取地址操作。 关键字extern用于声明全局变量时,可以扩展全局变量的作用域。除此之外,extern还可以使全局变量的作用域扩展到其他文件中。 外部变量有定义性声明和引用性声明两种声明方式。定义性声明表示定义变量,要为变量分配内存空间;引用性声明说明该变量已在程序源文件中的其他地方进行过定义性声明。外部变量的定义性声明只能放在函数的外部,引用性声明可放在函数外部,也可放在函数内部。 如: extern int b; //引用性声明,也可以放在函数内部 void fun() { coutb; } extern int b=5; //定义性声明,可以省略extren ... ... ... 当一个程序含有多个源文件时,在一个源文件中定义了一个全局变量后,其他源文件就不能再定义同一变量名的全局变量(但可以定义static全局变量),否则会导致变量重复定义的错误。此时,如果在

文档评论(0)

xuefei111 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档