- 1、本文档共61页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c程序设计真华中科技大学课件第三章new
* 返回值是如何返回到调用处的? 实际上,在函数返回时,系统会在内存建立一个临时变量,函数返回时将函数值保存在该临时变量中,然后由主调函数中包含调用的表达式语句从该临时变量中取得值,表达式语句执行后该临时变量撤销。 * 作用域:指标识符能够被使用的范围。只有在作用域内标识符才可以被访问(称为可见)。 本节重点讨论局部域和文件域(全局域),其中局部域包括块域和函数声明域。任何标识符作用域的起始点均为标识符说明处。 作用域与标识符的可见性 * 函数中定义的标识符,包括形参和函数体中定义的局部变量,作用域都在该函数内,也称作函数域。 块指一对大括号括起来的程序段。块中定义的标识符,作用域在块内。 复合语句是一个块。 函数也是一个块。 复合语句中定义的标识符, 作用域仅在该复合语句中。 块的引入: 3.5.1 块域 a= 3 b= 5 * 3 5 a=3 b=5 a=5 b=3 【例3.7】 输入两数,按从大到小的顺序保存,并输出结果。 结果 栈 t = 3 int main(){ int a,b; //具有函数域 cout输入两整数:endl; cinab; cout“a=a\tb=bendl; if(b=a){ int t; //具有块域 t=a; a=b; b=t; //交换a,b的值 } couta=a\tb=bendl; return 0;} 上述程序若在最后一个cout语句处增加: couttendl; 则编译时会提示错误,因为变量t的作用域只在if语句中,其它地方不可见。 3.5.1 块域 * 由VC++运行,结果如下: 输入两整数: 3 5 调用前:实参a=3,b=5 调用中… 交换前:形参a=3,b=5 交换后:形参a=5,b=3 调用后:实参a=3,b=5 交换失败 3.5.1 块域 局部变量具有局部作用域,使得程序在不同块中可以使用同名变量。这些同名变量各自在自己的作用域中可见,在其它地方不可见 【例3.8】设计函数完成两数交换,用主函数进行测试。 * 全局n= 100 200 300 内 i= 500 内 j= 600 内n=500+600 =1100 1100 500 600 100 200+300=500 500 500 200 300 外部 i=200 外部 j=300 【例3.9】 显示同名变量可见性。 int n=100; #include iostream using namespace std; int main(){ int i=200,j=300; cout n\ti\tjendl; { //内部块 int i=500,j=600,n; n=i+j; cout n\ti\tj endl; //输出局部变量n cout::nendl;//输出全局变量n } n=i+j; //修改全局变量 cout n\ti\tj endl; return 0;} * 3.6 存储类型与标识符的生命期 3.6.1 存储类型 3.6.2 生命期 * 自动存储类型 自动变量为用auto说明的变量,通常auto缺省。 局部变量都是自动变量,生命期开始于块的执行,结束于块的结束,其原因是自动变量的空间分配在栈中,块开始执行时系统自动分配空间,块执行结束时系统自动释放空间。故自动变量的生命期和作用域是一致的。 3.6.1 存储类型 * 3.6.1 存储类型 静态存储类型 static说明的变量称为静态变量。 位置不同区别局部静态变量和全局静态变量,也称内部静态变量和外部静态变量。 静态变量均存储在全局数据区,如果程序未显式给出初始化值,则等效初始化为全0。 静态变量占有的空间要到整个程序执行结束才释放,故静态变量具有整个程序执行期间的生命期。 * 局部静态变量是定义在块中的静态变量,编译系统在全局数据区为其开辟空间并保存数据,如果显式给出初始化值,则在该块第一次执行时完成,且只进行一次。 【例3.10】 自动变量与局部静态变量的区别 3.6.1 存储类型 * 【例3.10】 自动变量与局部静态变量的区别 int st(){ static int t=100; //局部静态变量 t++; return t; } int at(){ int t=100; //自动变量 t++;return t; } int main(){ int i; for(
文档评论(0)