版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1.变量 (variable) : 为存储器中的地址取一个名字。变量,也称为对象,是数据的存放之处 。变量有三个重要 属性:名称、值、类型 。变量定义就是 告诉编译器变量的名字及该变量中可以存放哪一类数据类型的值。( 1.1)变量的命名应符合规范。名称必须以字母或下划线的字符开头。C+ 语言中,变量名中出现的大写和小写字母被看作是不同的字符,因此ABC , Abc ,abc 是三个独立的变量名。(1.2)(1.3)名称中的其它字符必须是字母、数字或下划线,不得使用空格和其它特殊符号。名称不可以是系统的保留词,如:int, double, for, return 等,它们在 C+ 语言中有特殊用
2、途。(1.4)(1.5)变量名应使读者易于明白其存储的值是什么,做到 “见名知意 ”。C+ 没有规定过变量名的长度,较长的可用下划线连接。如 num_of_person2. C+ 中变量定义的格式 :类型名变量名 1,变量名2, ,变量名n ; 如: intnum1, num2;( 2.1)在 C+ 中,每个 变量在使用前必须被定义,以便编译器检查变量使用的合法性 。 变量定义只是给变量分配相应的空间。( 2.2) C+ 允许在 定义变量的同时给变量赋初值。变量未被赋值前,值为未知格式:类型名变量名= 初值 ;或者: 类型名变量名(初值) ;如: int count = 0;或int coun
3、t(0);都是定义整型变量count,并为它赋初值0。可以给被定义的变量中的一部分变量赋初值,如:int sum = 0, count = 0, num;( 2.3)一旦定义了一个变量,可以将一个常量赋给该变量。变量赋值过程是 “覆盖 ”过程 ,用新值去替换旧值如int a;a=123;或a = 0x123;都是正确的( 2.4)在 C+ 中, 定义变量时没有赋初值,然后直接引用该变量是危险的!3. 数据类型 (data type) :数据的编码方式、值域和可执行的操作。 数据类型包括 两个方面:数据的取值范围、可用的操作。 C/C+ 中的数据类型分为 两大类:基本数据类型: 整型、浮点型、字
4、符型和布尔型 构造数据类型: 字符串、数组、结构、联合和枚举( 3.1)整型 (int) :以补码形式存储,在 VC 中也是如此 。可执行传统的算术运算和比较运算。 整型数的表示范围:由各个编译器指定。整型数有三种存储方式,在 VC 中占用的空间如下所示:基本型int :4 byte (PC)231( 231 1)长整型 long: long / long int4 byte (PC)231( 231 1)短整型short :2 byte (PC)-2 15( 215 1)( 3.1.1)整数运算时要注意数据的表示范围。如整数用两个字节表示,正整数32767 加1 的结果为-32768。这称为
5、整数运算的溢出,系统不检查这样的错误,程序员必须自己保证程序中不出现这样的错误。( 3.1.2)在某些应用中,不可能出现负数,则整型数中有一半的数值范围是被浪费的。此在C/C+ 中可以将所有的数都看成正整数,称为无符号数。无符号数的定义:在各种整数类型前加上关键词unsigned,变成 unsigned int,unsigned short,unsigned long因unsigned intunsigned shortunsigned long0 232-10 655350 232-1( 3.2) 实型:以浮点表示,操作类似于整型,浮点数无法精确表示。( 3.2.1)浮点类型的分类:单精度f
6、loat: 占用 4 字节, 3字节尾数, 1字节指数 , 精确度 7 位范围 10 38 1038双精度double:占用 8 字节 , 5字节尾数 , 3字节指数 , 精确度 15 16 位 ,范围 10 307 10308( 3.3)字符型( char ):存放一个字母或符号,占一个字节,存放的是字符的内码。可执行比较、连接等运算。具有双重属性:整数属性和字符属性,整数属性:字符类型即单字节的整数类 ,字符属性:数据值即为相应字符的 Ascii 码。字符类型名: char。 可分为 可打印字符 :小写字母、大写字母、数字、标点符号、空格等; 非打印字符 :换行和报警字符或响铃 等控制字符
7、( 3.3.1) PC 机中都用 ASCII 码表示, 特性: 数字 0到9是顺序存放的,字母被分成二段:大写的和小写的。大写字母是连续的,小写字母也是连续的( 3.3.2)一些非打印和难以打印的字符需要用转义序列(escape sequeace)表示。反斜杠符号 称为转义字符(escape character) 。 如换行符写为 n,表示换行。虽然它由两个字符和 n 来描述,但它表示一个ASCII 字符。 警告字符 a 可以表示成 : 007,07,7。双引号的单字符表示:可以写 ”,也可以写 ”。 ddd 表示 1 到 3 位八进制数代表的字符。xhh 表示1 到 2 位十六进制数代表的字
8、符。t表示水平制表。表示反斜杠 ( 3.4)布尔型 (bool): 只有 “真 ”、 “假 ”两个值。可执行判断运算。如 bool flag=true;( 3.5)字符串( string):是类类型,用双引号“”表示,可执行字符串比较,连接应用时要加#include 如 stringstr=“dfhdsf ”;内部用 0 表字符串的结束( 3.6) sizeof运算符用来了解某一类型或某一表达式占用的内存量。sizeof 运算符的用法:sizeof(类型名 )或 sizeof(表达式 )如: sizeof(float) :表示float 类型的变量占用的内存量。sizeof( a+15):表示
9、表达式 a+15的计算结果所占的内存量。检查字符串的长度用strlen(),如 strlen( “asdfld”);4.常量:值的直接表示。如 1、 3、 1.57、 A等 ,又称直接量。( 4.1) 整型常量可用十进制、八进制和十六进制表示:如十进制:123,-234;八进制:0123十六进制: 0x123, 0x3a2f( 4.2)浮点数常量有两种表示法:( 1)十进制表示:1.23 , 3.14;( 2)科学计数法:尾数e 指数123e2=123002.25e-3=0.00225 ; 注意:尾数不能为空,指数必须为整数( 4.3)字符常量: a, S等用,一对2单引号 括起来的数据 。字
10、符串常量 用双引号( 4.4)命名常量:为值指定一个描述性的文字,增加程序的可读性。在C+ 语言中,用const修饰,如const double PI =3.14; 见 PI 即知 3.14 。注意一般变量名需大写,如PI 。5.算术运算符:+(加)-(减)* (乘)/ (求商)% (求余)( 5.1) “-”可为二元运算符,也可为一元运算符 ,其余 所有的算术运算符都是二元运算符 。( 5.2)优先级:高*/% , 低+-( 5.3)整型与整型数运算,结果为整型,如 5 / 2 = 2 ;整型与浮点数运算, 结果为浮点数,如 5 / 2.0 = 2.5 ;字符与整型数运算,结果为整型;字符与
11、浮点数运算,结果为浮点数。浮点数与浮点数运算,结果为浮点数。6.关系运算符:,=,=,=,!=( 6.1) 优先级: 高于赋值运算符,低于算术运算符。关系运算符内部:= 和 !=较低( 6.2)关系表达式: 用关系运算符将二个表达式连接起来 称为关系表达式。 关系表达式的结果是 true 或 false。 “等于 ”运算符 是由两个等号 组成 。常见的错误是在比较相等时用一个等号。 =( 相等 ), =(赋值)7.逻辑运算符: & (and)|(or)!(not)( 7.1)优先级:!高于关系运算符高于&高于 |( 7.2)逻辑表达式:由逻辑运算符连接起来的表达式,其结果为 “真 (true)
12、 ”或 “假 (false)”逻辑表达式在执行时,先处理左边。如左边已能决定此逻辑表达式的结果,则右边不执行。因此,在 &逻辑表达式中, 应把 false 可能性较大的条件放在左边,在 |表达式中,应把 true 可能性较大的条件放在左边,这样可以减少程序执行的时间8赋值运算符:= 的优先级比算术运算符低( 8.1)赋值语句:把一个值赋给一个变量。如 x = y + z; x = 3.14 ;赋值语句的左边是变量,右边是表达式。( 8.2)赋值表达式格式: = 如 x = x + 2 。作用:将右边的表达式的值存入左边的变量,整个表达式的值是右边的表达式的结果。赋值运算符是右结合的( 8.3)
13、左值 (lvalue): 在 C+ 中,能出现在赋值运算符左边的表达式称为左值右值( rvalue ):赋值运算符右边的表达式的值( 8.4)赋值语句:赋值表达式后面加上分号。( 8.5)将赋值表达式作为更大的表达式的一部分。如: a = (x = 6) + (y = 7)等价于分别将 x 和 y 的值设为6 和 7,并将 6 和 7 相加,结果存于变量a( 8.6)其他运算符与赋值运算符结合的运算符称为复合赋值运算符。格式:变量 op= 表达式 ; 等价于:变量 = 变量 op 表达式 ;常用的复合赋值运算符有:+=, =,*= ,/= ,%=如: balance += deposit;ba
14、lance -=surcharge;x /= 10; salary *=2;( 8.7)赋值和运算时的自动类型转换,在进行赋值操作时,会发生类型转换,将取范围小的类型转为取值范围大的类型是安全的反之是不安全的,如果 大类型的值在小类型能容纳的范围之内,则平安无事强制类型转换:(类型名) (表达式);或类型名(表达式);如 z = (double)x / y;静态转换 (static_cast):用于编译器隐式执行的任何类型转换格式: 转换类型 ( 表达式 )如z = static_cast(x) / y;单个分号组成的语句成为空语句用 括起来的一组语句称为复合语句。在逻辑上看成一个语句。复合语
15、句可以放在任何单语句出现的地方。在复合语句中可以定义变量,但必须定义在最前面。逗号表达式语句格式:表达式1,表达式2, ,表达式 n逗号运算符的优先级是所有运算符中最低的如 a 的初值为2, a += 3, a += 4, a += 5 的结果为15前置+i, -i(先执行 i+1 或 i-1,再使用i 值)0,则表达式a += 1, a +=后置i+, i-(先使用 i 值 ,再执行 i+1 或 i-1)9. 控制语句 : 改变程序中语句的执行次序。(9.1)if 语句 :两个分支: 条件测试为true 时所执行的程序块叫做then 子句,条件为语句叫做else子句。格式 ( 1 )if(条
16、件测试)语句; 即 else 语句可省略格式( 2)if(条件测试)语句 1;else语句 2;false 时执行的eg. if(grade = 60)eg. if(grade = 60)cout cout “ passed ”;“ passed ”;elsecout = 90)cout = 80)cout = 70)cout = 60)cout D“”;elsecout ”E ”;( 9.2)条件语句使用注意条件的结果值应该是true 或 false,它们是C+ 中 bool 类型的值条件可为任意表达式,不一定是关系表达式。0 为 false,非 0 为 if 语句可以没有else子句。合理
17、的缩排。 if 语句的 then 子句和 else子句含有if 语句,称为if 语句的嵌套。true 。egif (x 100)if (x 90)语句1;elseif (x80)else语句语句3;2;else 语句 4;歧义性:如最后一个else跟哪个 if 配对 .。egif (y != 0)elseif (x != 0)result= x / y;cout“ error :y = 0 ” y ? x :y;执行过程:首先计算条件值。如果条件结果为true,则计算表达式作为整个表达式的值。如果条件结果为false,则整个表达式的值为表达式1 的值,并将它2 的值。(9.3) Switch
18、case语句:又称开关语句。switch(表达式)case常量表达式1:语句case常量表达式2:语句1; break ;2 ; break ;case常量表达式n:语句default:语句 n+1 ;n ; break;使用注意:表达式应该是常量表达式,一般为整型表达式,字符 case后跟 break 表示结束switch 语句,否则一直执行,直到遇到 case与 default 无顺序要求,但一般default 在最后。break或语句结尾。 default表示除 case标号以外的其他情况。10.循环语句:一个完整的循环结构一般由四部分组成:循环体、循环控制条件、循环变量的初始化、循环变
19、量的增值其中,循环体 是需要重复执行的操作序列;循环控制条件是重复执行循环体所需的条件,即当条件成立时执行循环体,否则结束循环; 循环变量 是决定循环条件是否成立的变量;循环变量的增值反映了循环变量的改变规律,它使循环变量的值向着使循环结束的方向改变;循环变量的初始化是指在进入循环前,给循环变量赋初值, 否则首次进入循环时,无法确定循环控制条件是否成立。( 10.1) For 语句:主要用于计数循环格式: for(表达式1;表达式 2;表达式3)语句; or语句快 ;可以理解为 :for( 循环变量赋初值;循环条件;循环变量增值)符合循环条件时的执行语句循环体可以是复合语句或空语句。循环里所有
20、语句的一次完全执行称为一个循环周期。执行过程:先执行表达式1,再执行判断表达式2,如果为true ,执行一次循环体(即一个循环周期) ,接着执行表达式3,然后重新执行判断表达式2,若为true,又执行一次循环体,重复直至判断表达式2 为 false,,最后跳出整个循环。若开始执行条件表示2 为 false, 循环体一次也不执行。For 循环的三个表达式可以是任意表达式。三个表达式都是可选的。如果循环不需要任何初始化工作,则表达式1 可以缺省。 如循环前需要做多个初始化工作,可以将多个初始化工作组合成一个逗号表达式,作为表达式1。如 for (i=1 , s=0; i=10; +i) s+=i;
21、表达式 2 也不一定是关系表达式。它可以是逻辑表达式,甚至可以是算术表达式。当表达式 2 是算术表达式时,只要表达式的值为非 0,就执行循环体,表达式的值为 0 时退出循环。如果表达式2 省略,即不判断循环条件,循环将无终止地进行下去。称为“死循环”,最简单的死循环是for ( ;);无终止的循环表达式 3 也可以是任何表达式,一般为赋值表达式或逗号表达式。表达式 3 是在每个循环周期结束后对循环变量的修正。表达式3 也可以省略,此时做完循环体后直接执行表达式 2。 如从 1 加到 100,可以写为 S=0; for (i=1; i=100; ) s+=i, i+;或 s=0; for (i=
22、1; i=100; s+=i, i+) ;将一个 for 循环嵌入到另一个for 循环中,内层的 for 循环在外层循环的每一个周期中都将执行它的所有的周期,每个 for循环都要有一个自己的循环变量以避免循环变量间的互相干扰。其它循环嵌套类似执行。( 10.2) While 语句:与 for循环等价,可相互代替。格式: while (表达式)语句; or 语句块; 执行过程:先计算出条件表达式的值。如果是false,循环终止;如果是 true ,整个循环体将被执行, 而后又回到while 语句的第一行, 再次对条件进行检查,若为 true,接着执行循环体,重复直到条件为false,,跳出整个循
23、环。用途:用于循环次数不定的循环。循环是否结束取决于某一个变量的值(标记控制重复)在 for 和 while 语句之后一般没有分号,有分号表示循环体就是分号之前的内容(空循环体)( 10.3) Do- While 语句格式:do语句; or 语句块; while (表达式 ) ;执行过程:首先执行语句,然后判断表达式的值。如果表达式为否则,再次执行语句,再次判断表达式的值用途:用于至少执行一次的循环。注意后面有分号;0,继续向下执行,11 跳转语句:break 语句:跳出整个循环或switch 语句。若有多重循环,跳出含break最近的循环体。continue 语句:跳出当前本次循环,接着判断
24、是否执行下次循环周期。12 几种典型的循环。注意格式及应用输入验证循环:以下两种等价,右边一个常用cout radius;while ( radius 0) /当 radius 0 cout radius; ,docout radius ;while(radius 0) /当radius 0area = PI * radius * radius ;area = PI * radius * radius ;哨兵循环以下四个等价, 后面两个常用cout num;while ( num != -1)/ 当输入值不等于哨兵值时,继续输入sum += num;/处理数据do cout num;sum +
25、= num;cout num;不等于哨兵值时,继续输入while(true)/ 或while (1)for ( ; ; )cout 输入一个正整数:;/ 提示用户并读入数据cout num;cin num;if (num = -1) break; / if (num=标志 )跳出 ;if (num = -1) break;sum += num;/处理数据sum += num;查询循环char ans;/ 用于用户响应do cout radius;area = PI * radius * radius ;cout area = area endl;cout do you again?ans;/
26、询问提示/询问输入累加循环p=0;for(int i=1;i=N;i+)p=p+i;累乘循环: p=1for(int i=1;i=N;i+)p=p*i; while(ans = Y| ans = y); / /询问循环编译( compiler):将高级语言的程序翻译成机器语言,分为解释执行,编译执行连接 (link) :将目标程序与已有的其它目标程序连接起来,产生一个可执行的程序输出流是传给显示器的数据流,将变量或表达式的内容显示在显示器上格式输出一个变量的值:cout a;输出多个变量的值:cout a b c ;输出表达式的结果:cout “ Hello worldn” endl上述情况的
27、组合:cout a + b = a+b 变量 1 变量 2 变量 n; 如 cin a;当程序执行到cin 时会停下来等待用户的输入, 后面一定是变量名,不可加引号用户可以输入数据,用回车()结束。当有多个输入数据时,一般用空白字符(空格、制表符和回车)分隔。如: a 为整型, d 为 double,则对应于cin a d ,用户的输入可以为1213.2or12( tab 键) 13.2or12 13.212.。函数过程单元是程序的基本单位。在过程化的语言中,过程单元就是程序中某个模块的表示。在面向对象的语言中,过程单元说明对象对各种事件是如何响应的。过程单元分为:过程(procedure)
28、,函数(function)执行过程单元称为调用(calling),过程单元执行完后返回到调用者主要技术:自顶向下、逐步求精,采用单入口、单出口的控制结构。函数是一系列独立的程序步骤,这些程序步骤集合在一起,并赋予一个名字每个程序都必须有一个名为 main 的函数,它是程序的入口。主程序由一个或多个函数组成程序主体 (主函数main():主要包含如下模块:(definition input-proocess-ouput)(1) 变量定义:为程序中的数据准备存储空间( declaration or definition)(2)输入阶段: 接受所需输入的信息。它由两部分组成: 显示提示信息和接收输入
29、(input)(3) 计算阶段:完成所需的计算(process)(4) 输出阶段:输出计算的结果(output)函数的主要构成:函数声明,函数定义,函数调用可以把函数想象成数学中的函数。如f(x)=2x 参数表是 一组自变量x,返回类型是函数值的类型; 函数声明就是设函数为f(x) , 函数定义 (函数头 +函数体) 就是函数表达式 如 2x, 函数调用就是带值计算如f(2)=2 2。函数声明: 类似于变量声明,所有函数在使用前必须被声明。又称函数的原型,功能:说明函数和外界的交流,反映函数调用的全部信息。包括下列内容:函数名,函数的参数类型,函数的返回类型它的形式为:返回类型函数名(参数表)
30、 ;返回类型: 是函数的输出值的类型, void 函数没有返回值函数名 :是函数的名字。程序可以通过函数名执行函数体的语句参数表 :是函数的输入, 无参数列表,可不写,但是括号必须有。参数表中的参数说明之间用 “, ”分开,每个参数说明可以是类型,也可以是类型后面再接一个参数名。如: intmax(int, int);intmax(int a, int b);int main()函数定义 :函数头 +函数体,相当于一个小程序。函数头 :说明函数和外界的交流,与函数声明一样,参数表要有形参,void 除外函数体: 一系列独立的程序步骤; ,必须定义在函数体最前面形式:返回类型函数名(参数表)/
31、函数头code here;/ 函数体Eg : int max(int a, int b)/函数定义 if (a b) return(a); else return(b);函数调用形式: 函数名(实际参数表);一般出现在主调函数中或其他调用函数中。eg.max( x , y);函数执行过程:( 1) 在主程序中 计算每个实际参数值。( 2) 调用时将 实际参数的值 赋给对应的 形式参数 。在赋值的过程中完成自动类型转换。( 3)进入函数体依次执行函数体的每个语句,直到遇见return 语句或函数体结束( 4) 计算 return 后面的表达式的值,如果表达式的值与函数的返回类型不一致,则完成类型
32、的转换。( 5) 用函数的返回值置换函数,继续主程序的执行。Egint max(int a, int b);/函数声明intmain( ) int x, y;cin x y;cout b) return(a); else return(b);注意:(1) 形式参数和实际参数的个数 (number) 、排列次序 (order) 、类型 ( type) 要完全相同。(2) 实际参数可以是常量、变量、表达式,甚至是另一个函数调用(3) 传递方式:值传递 ,执行函数调用时,将实参值传递给形参,并替换形参同名的实体(4) 值传递:函数获得了主调程序 参数变量值 的拷贝。被调程序可以改变这些拷贝,但这对主
33、调程序的环境没有影响。( 5)请注意: C+中不允许函数定义嵌套,即在函数定义中再定义一个函数是非法的。一个函数只能定义在别的函数的外部,函数定义之间都是平行的,互相独立的。例如:下面的代码在主函数中非法嵌套了一个f ()函数定义:void main()void f()/ 函数参数的传递比较:1.按值传递以按值传递方式进行参数传递的过程为:首先计算出实参表达式的值,接着给对应的形参变量分配一个存储空间,该空间的大小等于该形参类型的长度,然后把已求出的实参表达式的值一一存入到为形参变量分配的存储空间中,成为形参变量的初值,供被调用函数执行时使用。这种传递是把实参表达式的值传送给对应的形参变量,故
34、称这种传递方式为“按值传递” 。这种方式被调用函数本身不对(主调函数中)实参进行操作,也就是说,即使形参的值在函数中发生了变化(主调函数中)实参的值也完全不会受到影响,仍为调用前的值。例:按值传递。void swap(int,int);/void main()函数定义int a=3,b=4;couta=a,b=“bendl;swap(a,b); /函数调用couta=a,b=b endl;void swap(int x,int y)/函数定义int t=x;x=y;y=t;此程序的运行结果为:a=3,b=4a=3,b=42. 地址传递 如果在函数定义时将形参的类型说明成指针,对这样的函数进行调
35、用时就需要指定地址值形式的实参。这时的参数传递方式即为地址传递方式。这种地址传递与上述的按值传递不同,它把实参的存储地址传送给对应的形参,从而使得形参指针和实参指针指向同一个地址。因此,被调用函数中对形参指针所指向的地址中内容的任何改变都会影响到实参。例:地址传递。void swap(int *x ,int *y);/函数声明void main()int a=3,b=4;couta=a,b=“bendl;swap(&a,&b);、couta=a,b=“bendl;void swap(int *x,int *y)int t=*x;*x=*y;*y=t;此程序的运行结果为:a=3,b=4a=4,b
36、=33. 引用传递 按值传递方式容易理解,但形参值的改变不能对实参产生影响;地址传递方式虽然可以使得形参的改变对相应的实参有效,但如果在函数中反复利用指针进行间接访问,会使程序容易产生错误且难以阅读。如果以引用作为参数,则既可以使得对形参的任何操作都能改变相应的实参的数据,又使函数调用显得方便、自然。引用传递方式是在函数定义时在形参前面加上引用运算符“&”。例引用传递。void swap(int &,int &);void main()int a=3,b=4;couta=a,b=“bendl;swap(a,b);couta=a,b=“bendl;void swap(int &x,int &y)
37、int t=x;x=y;y=t;此程序的运行结果为:a=3,b=4a=4,b=3函数的嵌套调用:函数体 由前述可知, C+函数不能嵌套定义,即一个函数不能在另一个函数体中进行定义。但在使用时,允许嵌套调用,即在调用一个函数的过程中又调用另一个函数。 例如:func1(int a, float b) float c;c=func2(b-1,b+1);/嵌套调用 ,func1调用 func2int func2(float x, float y)/函数体 /func1和 func2 是分别独立定义的函数,互不从属。函数的递归调用:一个函数直接或间接地调用自身,这种现象就是函数的递归调用。递归调用有两
38、种方式:直接递归调用和间接递归调用。直接递归调用即在一个函数中调用自身,间接递归调用即在一个函数中调用了其他函数,而在该其他函数中又调用了本函数。利用函数的递归调用,可将一个复杂问题分解为一个相对简单且可直接求解的子问题(“递推”阶段) ;然后将这个子问题的结果逐层进行回代求值,最终求得原来复杂问题的解(“回归”阶段) 。例:求 n 的阶乘。(函数递归调用的例程。)long f(int n) if(n0)cout “ error!“endl;return(-1);else if(n=1)return(1);elsereturn (n*f(n-1);/自己调用自己void main()long
39、f(int n);int n;coutinput n:n;coutn!=f(n)endl;此程序的运行结果为:please input n:5n!=120程序的内存区域:一个程序将操作系统分配给其运行的内存块分为4 个区域。( 1)代码区,存放程序的代码,即程序中各个函数中的代码块。( 2)全局数据区,存放程序全局数据和静态数据。( 3)堆区,存放程序的动态数据。( 4)栈区,存放程序的局部数据,即各个函数中的数据。2. 局部变量。在一个函数内部说明的变量是内部变量,它只在该函数范围内有效。也就是说,只有在包含变量说明的函数内部,才能使用被说明的变量,在此函数之外就不能使用这些变量了。所以内部
40、变量也称“局部变量” 。关于局部变量的作用域还要说明以下几点:1主函数 main() 中定义的内部变量,也只能在主函数中使用,其它函数不能使用。同时,主函数中也不能使用其它函数中定义的内部变量。因为主函数也是一个函数,与其它函数是平行关系。这一点是与其它语言不同的,应予以注意。2形参变量也是内部变量,属于被调用函数;实参变量,则是调用函数的内部变量。3允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。4在复合语句中也可定义变量,其作用域只在复合语句范围内。3. 全局变量(1) 在函数外部定义的变量称为外部变量。以此类推,在函数外部定义的数组就称为
41、外部数组。(2) 外部变量不属于任何一个函数,其作用域是:从外部变量的定义位置开始,到本文件结束为止。(3) 外部变量可被作用域内的所有函数直接引用,所以外部变量又称全局变量对于全局变量还有以下几点说明:(1)外部变量可加强函数模块之间的数据联系,但又使这些函数依赖这些外部变量,因而使得这些函数的独立性降低。从模块化程序设计的观点来看这是不利的,因此不是非用不可时,不要使用外部变量。 定义但不初始化, 则自动赋以 (整型和实型) 或0(字符型)(2)在同一源文件中,允许外部变量和内部变量同名。在内部变量的作用域内,外部变量将被屏蔽而不起作用。(3)外部变量的作用域是从定义点到本文件结束。如果定
42、义点之前的函数需要引用这些外部变量时,需要在函数内对被引用的外部变量进行说明。外部变量说明的一般形式为: extern 数据类型 外部变量 ,外部变量 2 ;注意:外部变量的定义和外部变量的说明是两回事。外部变量的定义,必须在所有的函数之外,且只能定义一次。而外部变量的说明,出现在要使用该外部变量的函数内,而且可以出现多次。静态局部变量1. 定义格式: static数据类型内部变量表;2. 存储特点(1) 静态局部变量属于静态存储。在程序执行过程中,即使所在函数调用结束也不释放。换句话说,在程序执行期间,静态内部变量始终存在,但其它函数是不能引用它们的。(2) 定义但不初始化,则自动赋以 (整
43、型和实型)或 0 (字符型);且每次调用它们所在的函数时,不再重新赋初值,只是保留上次调用结束时的值!(3) 何时使用静态局部变量需要保留函数上一次调用结束时的值。变量只被引用而不改变其值。外部存储类型 1. 构成一个程序的多个源文件之间,通过声明数据或函数为外部的( extern )来进行沟通。2. 所有函数声明一般都放在源文件的开始位置。3. 带 extern 的是变量声明,不是变量定义。静态存储类型 1. 静态全局变量( 1)在全局变量前加一个 static ,使该变量只在这个源文件中可用,称之为全局静态变量。全局静态变量就是静态全局变量。( 2)静态全局变量对组成该程序的其他源文件是无
44、效的。2. 静态函数函数的声明和定义默认情况下在整个程序中是 extern 的。有时候,你可能需要使某个函数只在一个源文件中有效,不能被其他源文件所用,这时在函数前面加上 static。生命期 1. 静态生命期这种生命期与程序的运行期相同,只要程序一开始运行,这种生命期的变量就存在,当程序结束时,其生命期就结束。2. 局部生命期在函数内部声明的变量或者是块中声明的变量具有局部生命期。3. 动态生命期这种生命期由程序中特定的函数调用( malloc() 和 free() )或操作符( new和 delete )来创建和释放。函数的作用域 1. 局部作用域当标识符的声明出现在由一对花括号所括起来的一段程序(块)内时,该标识符的作用域从声明点开始,到块结束处为止,该作用域的范围具
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 计算机考试女排题目及答案
- 2026五年级数学上册 可能性单元测试
- 信用担保机构与公信保证人制度
- 2026八年级下语文综合性学习方法指导
- 传染病分级分层分流制度
- 会务接待流程制度
- 企业某项业务的制度是不是属于专项制度
- 产品质量安全追溯制度
- 二手车商户经营制度
- 销售部门集客奖惩制度
- 2026年中学新团员入团测试题及答案
- (一模)东北三省三校2026年高三第一次联合模拟考试语文试卷(含答案详解)
- 2026河南郑州建设集团所属公司社会招聘工作人员44名笔试备考题库及答案解析
- 2026辽宁大连理工大学后勤处自聘管理岗位招聘2人笔试备考题库及答案解析
- 2026年吉安职业技术学院单招综合素质考试题库含答案详解
- 2026年春五年级下册数学教学计划(附教学进度表)
- 薄抹灰施工方案
- 2026年南京交通职业技术学院单招职业技能考试题库及答案详解(基础+提升)
- 2025年青岛农商银行春招笔试及答案
- 绍兴2025年浙江绍兴市政务服务办公室招聘政务服务专员6人笔试历年参考题库附带答案详解
- 中华人民共和国药品管理法实施条例培训宣贯
评论
0/150
提交评论