C语言-《变量作用域和预编译》_第1页
C语言-《变量作用域和预编译》_第2页
C语言-《变量作用域和预编译》_第3页
C语言-《变量作用域和预编译》_第4页
C语言-《变量作用域和预编译》_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 1回顾:模块化程序设计 1. 1. 主函数主函数, ,库函数和自定义函数的区别库函数和自定义函数的区别 2. 2. 自定义函数的定义自定义函数的定义、设计设计 3. 3. 递归函数的定义和用途递归函数的定义和用途回顾:模块化程序设计 2本次课内容本次课内容 3 变量的变量的与与 是指在程序运行过程中其值可以发生是指在程序运行过程中其值可以发生变化的量。通常是用来表示在程序中对数据存储空间变化的量。通常是用来表示在程序中对数据存储空间 的一种抽象的描述。的一种抽象的描述。 当我们在学习当我们在学习C语言中的变量时,必须要掌握语言中的变量时,必须要掌握 变变量的有关属性:量的有关属性: 一、一、

2、 变量的变量的与与 4 变量的变量的 5 6在函数内部(包括主函数)定义的变量,称为局在函数内部(包括主函数)定义的变量,称为局部变量,其作用范围只在函数内部有效,如下代码部变量,其作用范围只在函数内部有效,如下代码#include void fund1( void ) int nX= 100;/局部变量局部变量 printf(“nX in fund1=%dn”, nX);void fund2( void ) int nX = 200;/局部变量局部变量 printf(“nX in fund2=%dn”, nX);void main( void) int nX =50;/局部变量局部变量 pr

3、intf( nX in main=%dn”, nX); fund1(); fund2();本例中定义了三个局部变量本例中定义了三个局部变量nX, nX, 其作用范围分别作用于其作用范围分别作用于fund1,fund fund1,fund 和和mainmain函数函数打印结果:打印结果:nX in main=50nX in main=50nX in fund1=100nX in fund1=100nX in fund2=200nX in fund2=200局部变量局部变量局部变量局部变量 7 变量的变量的 8 1、若在同一个源文件中,如有全局变量与局部、若在同一个源文件中,如有全局变量与局部 变

4、量同名时,则在局部变量的作用范围内,变量同名时,则在局部变量的作用范围内, 全局变量不起作用。全局变量不起作用。 2、设置全局变量的作用是、设置全局变量的作用是: 增加函数间数据联系的渠道。增加函数间数据联系的渠道。 由于同一个文件中的所有函数都能引用全局变量的值,因此如果在一个函数中改变了全局变量的值,就能影响到其它函数,相当于各个函数间有直接的传递通道。 9 10#include int nX = 999;/全局变量全局变量 void fund1( void ) printf(“nX in fund1=%dn”, nX);void fund2( void ) int nX = 0;/局部变

5、量局部变量 printf(“nX in fund2=%dn”, nX);void main( void) printf( nX in main=%dn”, nX); fund1(); fund2(); 在此范围中,局部在此范围中,局部变量变量nX的作用范围替的作用范围替代了全局变量代了全局变量nX的作的作用范围。用范围。本例中函数本例中函数fund2fund2中的中的nXnX作用作用范围与全局变量范围与全局变量nXnX有重叠部有重叠部分,在重叠部分中使用局部分,在重叠部分中使用局部变量,屏蔽掉了全局变量变量,屏蔽掉了全局变量打印结果:打印结果:nX in main=999nX in main=

6、999nX in fund1=999nX in fund1=999nX in fund2=0nX in fund2=0 11 在程序运行期间分配固定 的存储空间(如 全局变量)。 只有当函数被调用时才开始分配存储空间,在函数执行结束时就释放这些空间。在程序执行过程中,这种分配和释放是动态的(如 局部变量)。 12 在C语言中,每一个变量和函数有两个属性:和数据的。 数据类型,如整型、实型等; 存储类别,指的是数据在计算机中的存储方式, 也可以说数据的 。 13 函数中的局部变量通常默认为动态分配存储空间的,即存储在动态存储区中。对它们分配和释放空间都是由编译系统自动处理的,因此这类局部变量也称

7、为。 14 有时希望函数中的局部变量的值在函数调用结束后而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值。参见源码参见源码:9_1 exp0901 15 int int =0; int =3; b=b+1;c=c+1; return(a+b+c); 16 17 全局变量的调用。 我们知道一个C 语言程序可以有一个或多个源程序文件组成。如果程序是由多个源文件组成时,为了保障某个全局变量能提供多个源文件中的函数调用,则可采全局变量的扩展调用。 3、全局变量的调用 1.4 全局变量的调用 参见源码参见源码:9_1 exp0902 u如果一个函数只

8、能被它所在文件中的其他函数所调用,则称为内部函数或静态函数内部函数或静态函数,如:uStatic int fun(int a,int b).u在多文件组成的程序中,如果在一个源程序文件中定义的函数,除了能在本程序内使用,还可以在其他源程序文件中使用.如:uExtern int fun(int a,int b)u外部函数不用引用头文件.18内部函数和外部函数参见源码参见源码:9_1 exp0903 19但是,在有些情况下需要某些变量中的值频繁地读写(如某循环变量需要执行10000次循环,显然为了读写变量的值就需要花费许多的时间。因此,为了提高程序的执行效率,在C语言中允许将这些变量的值可以储存在

9、CPU中的寄存器中,需要时可直接从寄存器中读出参加运算,而不必再到内存中去读写。由于寄存器的存取速度远高于内存的存取速度,因此可以提高执行效率。 这种变量称为 “寄存器变量” 。 int fac(int n) int i, f=1; for(i =1; i =n; i +) f=f* i ; return( f ); 4、使用寄存器变量 register1.5 使用寄存器变量 register 20一般情况下,变量(包括静态和动态)的值都是存放在内存中的,当程序中用到哪一个变量的值时,则由控制器发出指令将内存中该变量的值送到运算器中进行运算,之后再将运算结果送回内存中存放。 21只有只有 和和

10、 可以作为寄存器变量可以作为寄存器变量 。变量变量作为寄存器变量。作为寄存器变量。 不能把变量 既放在静态存储区中,又放在寄存器中,二者只能居其一。 对于一个变量只能定义为一个存储类别。对于占用字节数多的变量,如对于占用字节数多的变量,如: 型变量型变量 说明为寄存器型变量。说明为寄存器型变量。由于寄存器中的数据可以直接访问,因此比其它存储类别的变由于寄存器中的数据可以直接访问,因此比其它存储类别的变 量量。所以对于。所以对于的变量均可作为寄存的变量均可作为寄存器变量。器变量。寄存器型变量都是在某个函数中定义的,所以一旦退出该函数后就会寄存器型变量都是在某个函数中定义的,所以一旦退出该函数后就

11、会 被被 。 22 23预编译语句是在程序编译之前由编译器进行的源代码处理工作。处理完成后的源代码再进入编译工作。C+语言提供的预编译语句主要有以下三种:宏定义宏定义文件包含文件包含条件编译条件编译 预编译指令预编译指令均以均以“# #”号标识号标识注意注意预编译语句二、 预编译语句 24定义一般形式:定义一般形式:#define #define 标识符标识符 字符串字符串取消宏定义取消宏定义: : #undef #undef 标识符标识符 作用:在预处理过程中将源程序中的标识符替换成字符串作用:在预处理过程中将源程序中的标识符替换成字符串例:例:#include #define WM “We

12、lcom”#define UINT unsigned int#define PI 3.14159void main( void) printf( WM); UINT na = 100; UINT nb = 200; double dbA = PI * na * na;#include void main( void) printf( “Welcom”); unsigned int na = 100; unsigned int nb = 200; double dbA = 3.14159 * na * na;编译预处理编译预处理宏定义-#define指令2.1 宏定义-#define指令参见源码

13、参见源码:exp0904exp0906 25文件包含预处理控制有两种形式文件包含预处理控制有两种形式: #include /包含系统标准库文件 #include “filename” /包含自定义文件作用:作用:在预处理过程中用包含文件的内容取代在预处理过程中用包含文件的内容取代#include#include命令命令. .例:例:#include #include “test.h”void main( void) int na = nV; double dba = dbV;#include int nV = 10;double dbV = 0.5;void main( void) int na = nV; double dba = dbV;编译预处理编译预处理test.h文件包含-#includeint nV = 10;double dbV = 0.5;2.2 文件包含-#include参见源码参见源码:exp0907 本次课课程总结1全局变量及局全局变量及局部变量的作用部变量的作用域域2变量的变量的4种存储种存储类型类型3预编译概念,预编译概念,defineinclude的使用的使用 作业布置与要求 1、设计一个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论