- 1、本文档共116页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
程序设计方法07
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 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.16 考察静态局部变量的值 #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; c=c+1; return(a + b + c); } main( ) i a f(a) 0 2 f(2) 1 2 f(2) 2 2 f(2) f(a) a b c return(a+b+c) 2 0 3 1 4 return(7) 2 0 4 1 5 return(8) 2 0 5 1 6 return(9) 运行结果:7 8 9 对静态局部变量的说明: ⑴分配在静态区,程序运行结束释放存储单元。 ⑵赋初值一次未赋初值时为0,前次结果保留。 ⑶局部动态变量若未赋初值,其值不确定,局部静态变量未赋初值,其值为0或‘\0’(字符变量)。 ⑷静态局部变量在函数调用结束后虽存在,但其它函数不能引用它。 使用局部静态变量的场合 (1)需要保留上一次调用结束时的值 例7.17 打印1到5的阶乘值 #include stdio.h void main( ) {int fac(int n); int i; for(i=1; i=5; i++) printf(“%d != %d\n”, i, fac(i)); } int fac(int n) { static int f=1; f=f*n; return(f); } main( )
文档评论(0)