- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.6 函数与变量的作用域 void main() { printf(Color in main() is %c\n,color); first(); printf(Color in main() is %c\n,color); second(); printf(Color in main() is %c\n,color); } void first(void) { char color; /*定义局部变量*/ color=R; printf(Color in first() is %c\n,color); } void second(void) { color=G; printf(Color in second() is %c\n,color); } 6.6 函数与变量的作用域 程序输出如下: Color in main() is B Color in first() is R Color in main() is B Color in second() is G Color in main() is G 6.6 函数与变量的作用域 6.6.2 动态存储变量与静态存储变量 动态存储变量 系统在程序运行期间根据需要对存储空间进行动态分配的变量称为动态存储变量。 在函数中定义的局部变量和形参都属于动态存储变量。 动态存储变量的值在函数调用结束后就无法使用了,即变量的生存期并不等于程序的整个执行期。 每次调用函数时,系统会为这些变量重新分配存储空间,这就意味着如果在一个程序中两次调用同一个函数,系统分配给这个函数中的局部变量和形参的存储空间可能是不同的。 可以在函数内部定义局部变量时使用auto关键字,从而显式声明该变量采用动态存储方式。 注意,不能在声明形参时使用auto关键字,因为形式参数只能采用动态存储方式 。 6.6 函数与变量的作用域 静态存储变量 系统在程序运行期间为其分配固定存储空间的变量称为静态存储变量 全局变量就是一种静态存储变量,系统在程序开始执行时为其分配存储空间,直到程序执行完毕才释放,因此整个程序执行期都是全局变量的生存期 可以使用static关键字将局部变量的存储方式声明为静态存储方式,在函数调用结束后保留其局部变量的值,即不释放局部变量所占据的存储空间,从而在下一次调用该函数时可能继续使用上一次调用结束时的结果 例6-19 编程计算1-1/2!+1/3!-1/4!+…+(-1)n-1/n!,精度为0.000001。(选读) 程序代码如下: #includestdio.h double term(int n); 6.6函数与变量的作用域 void main() { int i=1,k=1; double s=0.0,t; do { t=term(i); s=s+k/t; i++; k=-k; }while(1.0/t1e-6); printf(%lf\n,s); } double term(int n) { static double t=1.0; /*静态局部变量的声明与初始化*/ t=t*n; return(t); } 6.6函数与变量的作用域 说明: 静态局部变量的生存期是从该变量被分配存储空间开始,即定义该变量的函数被调用开始,直到程序结束。但是,静态局部变量的作用域仍然局限于定义它的函数,静态局部变量在上一次调用结束后被保留下来的值,也只能在该函数的下一次调用中使用,而不能被其它函数使用。 可以使用static关键字将全局变量的作用域局限于定义它的文件中,而不能被其它文件访问。 6.7 程序应用举例 例6-20 验证哥德巴赫猜想,即一个大于等于6的偶数可以表示为两个素数之和,如6=3+3、8=3+5、10=3+7……。 #include stdio.h int prime(int n); /*声明函数原型*/ void guess(int n); /*声明函数原型*/ void main() { int n,n1,n2; do /*此循环确保输入的n为大于等于6的偶数*/ { printf(Please input an even number(=6):); scanf(%d,n); }while(!(n=6n%2==0)); guess(n); /*调用函数*/ } 6.7 程序应用举例 void guess(int n) //定义函数 { int n1,n2; for(n1=3;n1n/2;n1+=2) {
您可能关注的文档
最近下载
- 【雷赛】SMC6490软件使用手册V1.1.pdf VIP
- 2025北京初三二模语文汇编:现代文阅读.docx
- 2025年林业局遴选公务员面试题库附答案.doc VIP
- 中班语言活动山羊种菜(故事).ppt VIP
- 公路工程月进度计划.pdf VIP
- 公路工程月进度计划.pdf VIP
- 公路工程月进度计划.docx VIP
- 2025中国中医科学院中医药健康产业研究所(江西中医药健康产业研究院)招聘事业编制人员笔试备考题库及答案解析.docx VIP
- 国家中医药管理局发布的406种中医优势病种诊疗方案和临床路径目录.pptx VIP
- 2025中国中医科学院中医药健康产业研究所(江西中医药健康产业研究院)招聘事业编制人员笔试备考试题及答案解析.docx VIP
文档评论(0)