C语言设计_06函数与编译预处理技术总结.ppt

C语言设计_06函数与编译预处理技术总结.ppt

  1. 1、本文档共54页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(2)在同一源文件中,如果全部变量与局部变量同名,则在局部变量的作用范围内,全局变量不起作用。 【例6.9】写出程序的输出结果。 (3)在程序中定义全局变量的主要目的是为函数间的数据联系提供一个直接传递的通道。在某些应用中,函数将执行结果保留在全局变量中,使函数能返回多个值。在另一些应用中,将部分参数信息放在全局变量中,以减少函数调用时的参数传递。因程序中的多个函数能使用全局变量,其中某个函数改变全局变量的值就可能会影响其他函数的执行,产生副作用。 6.5.2 变量的存储类别 变量具有可访问性和存在性两种基本属性。前面介绍的变量作用域是指在程序的某个范围内的所有语句都可以通过变量名访问该变量,即代表变量的可访问性。 在计算机中,保存变量当前值的存储单元有两类:一类是内存,另一类是CPU中的寄存器。变量的存储类别就是讨论变量的存储位置,C语言中定义了4种存储类别,即自动(AUTO)变量、外部(EXTERN)变量、静态(STATIC)变量和寄存器(REGISTER)变量,它关系到变量在内存中的存放位置。C语言用变量的存储类别指明变量的存在性,可分为两大类:静态存储和动态存储。所谓静态存储是指在程序运行期间分配固定的存储空间,而动态存储则是在程序运行期间根据需要动态分配存储空间。 变量的可访问性与存在性在某些场合是一致的,但在有些场合则不一致。存在这样的情况,一个变量在某时刻虽然存在,但此时不可访问它。 1.局部变量的存储类别 (1)自动变量。 (2)局部静态变量。 【例6.10】写出程序的输出结果。 (3)寄存器变量。 另有两点需特别指出,其一是寄存器变量不能执行取地址运算(用运算符);其二是寄存器变量不能是静态变量。 2.全局变量的存储类别 全局变量是在函数之外定义的变量,编译时按静态方式分配存储单元。全局变量可以为程序中各个函数所引用。 一个C程序可以由一个或多个源程序文件组成,而全局变量定义的作用域是从它的定义处开始到源程序文件的末尾。如果在位于全局变量定义之前的函数中要引用该全局变量,需在引用之前对它作外部变量声明。同样地,如果在定义全局变量源文件之外的源文件中引用该全局变量,也需在引用之前对它作外部变量声明。在变量定义之前冠以关键字EXTERN,就声明变量是外部变量。 为了表明变量是静态的,在变量定义时冠以关键字STATIC。在C语言中,“静态”包含两方面的意义。从程序对象在程序执行期间的存在性来看,静态表示该程序对象“永久”存在。从程序对象可访问或可调用来看,静态表示该程序对象的专用特性。具体表现在,局部静态变量只有定义它的函数可访问,全局静态变量只有在定义它的源文件中可访问或可调用。 6.6 内部函数和外部函数 6.6.1 内部函数 内部函数又被称为静态函数,它只能被定义它的文件中的其他函数调用,而不能被其他文件中的函数调用,亦即内部函数的作用范围仅仅局限于本文件。为了定义内部函数,需要使用关键字STATIC。例如: STATIC LONG FACTORIAL INT X ; 此时,函数FACTORIAL的作用范围仅局限于定义它的文件,而在其他源文件中不能调用此函数。如果在不同的源文件中存在同名的内部函数,它们互不干扰。 6.6.2 外部函数 因为函数与函数之间都是并列的,即函数不能嵌套定义,所以函数在本质上都具有外部性质。内部函数(静态函数)只能被定义它的源文件中的函数调用,而不能被其他源文件中的函数调用。除此之外,其余的函数既可被定义它的源文件中的函数调用,也可以被其他源文件中的函数所调用,即其作用范围不只局限于函数所在的源文件,而是整个程序的所有文件。有时为了明确这种性质,可以在函数定义和调用时使用关键字EXTERN,EXTERN既可用于外部函数的定义,也可用于外部函数的声明。 6.7 函数应用举例 【例6.11】先定义函数求,然后调用该函数求。 【例6.12】设计一个按分数规则进行加减法的程序。其中I K×M±N×L,J L×M,I、J的最大公约数为1。 【例6.13】设计一个程序,求同时满足下列两个条件的分数X的个数: (1)1/6 X 1/5。 (2)X的分子分母都是素数且分母是2位数。 【例6.14】汉诺(HANOI)塔问题。有3根柱子A、B、C,A上堆放了N个盘子,盘子大小不等,大的在下,小的在上,如图6-8所示。现在要求把这N个盘子从A搬到C,在搬动过程中可以借助B作为中转,每次只允许搬动一个盘子,且在移动过程中在3根柱子上都保持大盘在下,小盘在上。要求打印出移动的步骤。 A B C 图6-8 汉诺塔问题 6.8 编译预处理 C语言共有3种编译预处理命令,即宏定义、文件包含和条件编译。 6.8.1 宏定义 C语言有两种宏定义命令:带参数的宏定义和不带参数的宏定义。

文档评论(0)

yy558933 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档