- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
存储类 外存 内存 程序 程序区 静态存储区 动态存储区 存放程序代码 存放变量 需要区分变量的存储类型 作用域 全局变量 局部变量 生存期 动态存储变量 静态存储变量 静态存储:在文件运行期间有固定的存储空间,直到文件运行结束。 动态存储:在程序运行期间根据需要分配存储空间,函数结束后立即释放空间。若一个函数在程序中被调用两次,则每次分配的单元有可能不同。 动态存储区 静态存储区 程序区 全局变量 静态局部变量 动态局部变量 局部变量的分类 动态变量(auto):默认,存储在动态区 寄存器变量(register):在cpu内部存储 静态局部变量(static):存储在静态区 动态局部变量未被赋值时,其值为随机值。其作用域的函数或复合语句结束时,空间被程序收回。 程序执行到静态局部变量时,为其在静态区开辟存储空间,该空间一直被保留,直到程序运行结束。 由于存储在静态区,静态局部变量或全局变量未赋初值时,系统自动使之为0。 int fun(int a) { int c; static int b=3; c=a+ b++; return c; } void main(void) { int x=2, y; y=fun(x); coutyendl; y=fun(x+3); coutyendl; } x 2 y a 2 b 3 c 5 4 5 5 a 5 只赋一次初值 c 9 5 9 9 输出: 变量b是静态局部变量,在内存一旦开辟空间,就不会释放,空间值一直保留 int f (int a) { int b=0; static int c=3; b=b+1; c=c+1; return a+b+c; } void main(void) { int a=2,i; for (i=0;i3;i++) coutf(a)endl; } i=0 a=2 b=0, b=1 c=3, c=4 输出:7 i=1 a=2 b=0, b=1 c=4, c=5 输出:8 i=2 a=2 b=0, b=1 c=5, c=6 输出:9 7 8 9 只赋一次初值 int func (int a, int b) { static int m=0, i=2; i+=m+1; m=i+a+b; return m; } void main(void) { int k=4, m=1, p; p=func(k, m); coutpendl; p=func(k, m); coutpendl; } func( 4, 1) a=4, b=1 m=0, i=2 i=3 m=3+4+1=8 func( 4, 1) a=4, b=1 m=8, i=3 i=3+8+1=12 m=12+4+1=17 输出:8,17 int q(int x) { int y=1; static int z=1; z+=z+y++; return x+z; } void main(void) { coutq(1)‘\t’; coutq(2)‘\t’; coutq(3)‘\t’; } 4 9 18 全局变量的存储方式(extern static) 全局变量的默认方式,当在一个文件中要引用另一个文件中的全局变量或在全局变量定义之前要引用它时,可用extern作说明,相当于扩大全局变量的作用域。 2、静态(static)存储类别 1、extern 存储类别 全局变量是在函数的外部定义的,编译时分配在静态存储区,如果未赋初值,其值为0。 它仅能在本文件中引用,即使在其它文件中用extern说明也不能使用。相当于限制了全局变量的作用域范围。 程序的作用是:给定b的值,输入a和m,求a×b和am的值。 文件file1.c中的内容为: int a; void main(void) { extern int power (int); int b=3, c, d, m; cinam; c=a*b; couta“*”b“=“cendl; d= power(m); couta“**”m“=“dendl; } 文件file2.c中的内容为: extern int a; int power (int n ) { int i, y=1; for (i=1; i=n; i++) y*=a; return y; } 外部全局变量定义 外
文档评论(0)