- 1、本文档共56页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
变量的存储类有:(1)自动存储类auto(2)外部存储类extern(3)静态存储类static(4)寄存器存储类register 即确定了变量在内存中存放的位置。 也就决定了变量的生存期和作用域。 外部存储类extern就是外人可以访问,共享的数据。静态存储类static就是外人没有权限访问,仅为本人所有。 自动存储类auto,比如形参,调用函数时,给形参开辟空间,函数执行完释放形参的空间,再次调用函数,再给形参开辟空间,函数执行完释放形参的空间,动态 寄存器存储类register:比如,要做饭,发现停水了,怎么办?带上钱,穿上鞋,下楼到超市买水,再上楼,半个小时过去了,如果平时家里就有储备水的话,这顿饭快不快?但是平时储备会很多吗?比如洗个被单等的大件,如果停水,你敢洗吗?所以少量的水可以储备,即寄存器的容量小,可以实现,占字节数大的变量只能定义在内存。 Int A,b;外部的变量,但又希望不被破坏,前面加static * §7.4.2用地址的复制方式传送数据 传址调用:实参用变量地址,形参用指针变量。 【例7.12】 分析下面程序中数据传送的特点。 fun1(int *x, int *y) { int temp; temp=*x; *x=*y; *y=temp; printf(*x=%d,*y=%d\n,*x,*y); } #include stdio.h main() { int a,b; a=10; b=20; printf(“a=%d,b=%d\n,a,b); fun1(a,b); printf(a=%d,b=%d\n,a,b); } 10 20 a b x y 20 10 a=10,b=20 *x=20,*y=10 a=20,b=10 §7.3.2 外部存储类变量及其作用域 定义的格式:数据类型变量名表; 定义的位置:在程序中的函数外定义。 生存期:整个程序(编译时分配内存空间,静态区存储, 外部变量的初始化仅执行一次。当没有初始化 时,数值型外部变量取初值0,字符型外部变量 取空字符‘\0’)。 作用域:可以在整个程序不同文件的所有函数中(这时需 要进行说明,扩展作用域)。不作扩展声明,作 用域是从定义的位置到本文件结束。 外部类变量的特点: 作用域大、生存期长,生存期和作用域一致,是程序 级的,在整个生存期期间都可访问。 注意: 外部类变量可以用来在函数间传送数据,但尽量少用。 因为任何函数都可以改变外部变量的值,不安全。 定义位置后面的函数中都可直接 访问外部变量,不需要进行说明。 int a,b; swap() { int temp; temp=a;a=b;b=temp; } main() { a=56;b=110; swap(); printf(a=%d,b=%d\n,a,b); } a,b 作用 域 运行结果如下: a=110,b=56 定义位置前的函数中使用时需要先进行说明 源文件file1.c swap() { extern int a,b; int temp; temp=a;a=b;b=temp; } int a,b; main() {a=56;b=110; swap(); printf(a=%d,b=%d\n,a,b); } 运行结果如下: a=110,b=56 a,b 作用域 扩展 a,b 作用 域 a,b 作用域 其它文件中使用时要先说明 源文件file1.c int a,b; swap() {int temp; temp=a;a=b;b=temp; } 源文件file2.c extern int a,b; main() {a=56;b=110; swap(); printf(a=%d,b=%d\n,a,b); } 运行结果如下: a=110,b=56 利用外部变量传送数据 外部变量是全局变量。全局变量是程序中所有函数 都可以访问的变量(公共变量)。 这种传送数据方法降低了函数之间的独立性,容易 出错,不利于调试和维护。 int sum; plus(int x, int y) { sum=x+y; } main() {int i,j; scanf(%d%d,i,j); plus(i,j); printf(\ni+j=%d, sum); } 运行情况如下: 9 12↙ i+j=21 int sum; 运行情况如下: 9 12↙ i+j=0 外部变量sum 作用域 自动变量sum 作用域 §7.3.3 静态存储类变量及其作用域 定义的格
文档评论(0)