- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第七讲 函数和程序组织
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 例7.16 外部变量与局部变量同名 #include stdio.h int a=3,b=5; void main() { int max(int a, int b); int a=7; printf(max=%d,max(a,b)); } int max(int a, int b) { int c; c=ab?a:b; return(c); } 运行结果:max=7 例 外部变量副作用 int i; main() { void prt(); for(i=0;i5;i++) prt(); } void prt() { for(i=0;i5;i++) printf(“%c”,’*’); printf(“\n”); } 运行结果:***** 原意输出5行*号,使用外部变量i 后只输出一行*号。 局部变量a=7将外部变量a=3屏蔽 7.9 变量的存储类别 动态存储方式与静态存储方式 变量分类: 按数据类型:整型、实型、字符型 按作用域:全局变量、局部变量 存储方式: 静态存储:程序运行期间分配固定的存储空间。 动态存储:程序运行期间根据需要动态分配存储空间。 内存用户区 程序区 静态存储区 动态存储区 全局变量、局部静态变量 形参变量 局部动态变量(auto register) 函数调用现场保护和返回地址等 生存期: 静态变量:从程序开始执行到程序结束 动态变量:从包含该变量定义的函数开始执行至函数执行结束 auto变量 函数内部无static声明的局部变量均为动态存储类别,被分配在动态区 。 存储类别为自动时,声明符auto可省;自动变量被 分配在动态区,未赋初值时,其值未定义,每次调用重新赋值。 例如: int f(int a) /*定义f函数,a为形参*/ {auto int b,c=3; /*定义b、c为自动变量*/ … } 又如:auto int b,c=3; int b,c=3; /*两者等价*/ 例 auto 变量的作用域 main() { int x=1; void prt(void); { int x=3; prt(); printf(“2nd x=%d\n”,x); } printf(“1st x=%d\n”,x); } void prt(void) { int x=5; printf(“3th x=%d\n”,x); } 运行结果: 3th x=5 2nd x=3 1st x=1 x=1作用域 x=1作用域 x=3作用域 x=5作用域 用static声明局部变量 若希望函数调用结束后,局部变量的值保留,则指定该变量为静态局部变量,用static对变量加以声明。 例 局部静态变量值具有可继承性 main() { void increment(void); increment(); increment(); increment(); } void increment(void) { int x=0; x++; printf(“%d\n”,x); } 运行结果:1 1 1 main() { void increment(void); increment(); increment(); increment(); } void increment(void) { static int x=0; x++; printf(“%d\n”,x); } 运行结果:1 2 3 例7.17 考察静态局部变量的值 #include stdio.h void main( ) { int f(int) ; int a=2, i; for(i=0; i3; i++) printf(“%d ”, f(a)); } int f(int a) { auto b=0; static c=3; b=b+1;
文档评论(0)