- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2010版C语言第十二章
第十二章 用户标识符的作用域和存储类 可执行文件运行时在内存中占据一定的存储空间, 分为: 代码区和数据区 用户标识符【变量】的存储类: 变量在哪一个存储区存放,静态类和自动类 静态存储区: 变量初始值为0, 生存期:定义后到文件结束; 动态存储区: 变量初始值为不确定的随机数, 生存期: 只在一次调用中,调用开始生存期开始,调用结束生存期截至 变量的作用域: 变量起作用的范围 局部变量 只在某一个局部范围【函数】内起作用 自动局部变量:局部变量的默认形式 auto 类型 变量; auto int x; 动态存储区中存放, 当函数调用时定义变量生存期开始,函数结束时,释放存储空间,生存期结束,下次调用时再次定义 静态局部变量:static 类型 变量; static int x; 静态存储区中存放, 当函数第一次调用时定义变量生存期开始, 函数结束时,不释放存储空间,下次调用时直接使用上一次的结果,文件结束释放空间生存期结束 寄存器局部变量:register 类型名 变量名; register int c; 存储在CPU中的寄存器内, 不能进行取地址操作, 数目不能过多,只能是int或char Example 12_1自动局部变量和静态局部变量的比较 #include stdio.h void fun() { int x=3; /*定义自动局部变量x并赋值为3*/ static int y=3; /* 定义静态局部变量y并赋值为3 */ printf(\tx=%d,y=%d\n,x,y); x+=2;y+=2; printf(\tx=%d,y=%d\n,x,y); } main() { printf(第一次调用:\n); fun(); printf(第二次调用:\n); fun(); printf(第三次调用:\n); fun(); } 全局变量 全局变量只有静态一种类别 从定义点开始直到文件结束都起作用 全局变量与同名局部变量的作用域重叠在重叠区域以局部变量为准 Example 12_2 全局变量与局部变量的比较 #include stdio.h void f1() { int y; y=7; printf(f1函数输出:y=%d\n,y); } double x=3.5;/*定义全局变量x,该行以下都是作用域*/ void f2() { x+=2.5; printf(f2函数输出:x=%lf\n,x); } void f3() { int x=5;/*局部变量和全局变量在f3函数中作用域重叠,则在f3函数中int x起作用*/ x+=10; printf(f3函数输出:x=%d\n,x); } main() { x+=5.5;f1( ); x+=2.7;f2();x++; f3(); printf(主函数输出:x=%lf\n,x);} extren说明符 可在同一编译单位内用extren说明符扩展全局变量的作用域 也可在不同的编译单位内用extren说明符扩展全局变量的作用域 而静态static全局变量只限于本编译单位使用 以上对函数也成立 1、以下程序的运行结果是 ( ) int func(int a, int b) { static int m=0, i=2; i+=m+1; m=i+a+b; return m; } main( ) { int k=4, m=1, p; p=func(k,m); printf(%d“,p); p=func(k,m); printf(%d \n,p); } 有以下程序的运行结果是___#include stdio.hint a=1;int f(int c){ static int a=2; c=c+1; return (a++)+c;}main(){ int i,k=0; for(i=0;i2;i++) {int a=3; k+=f(a) ;} k+=a; printf(“%d\n”,k);} * * 键入和 编辑 编译 执行 连接 源程序 (*.c) 目标程序 (*.obj) 可执行文件 (*.exe) 运行结果 若有错,则修改 动态存储区 数据区 静态存储区 程序代码 代码区
文档评论(0)