第7章函数1案例.ppt

  1. 1、本文档共54页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
§7.3.1自动存储类变量及其作用域 定义的格式:[auto] 数据类型变量名表; 定义的位置:函数的形参、函数体开始处以及复合语句 开始处定义的非静态变量。 生存期:定义它的函数或复合语句内。 作用域:定义它的函数或复合语句内。 int max(int x,int y) {[auto] int m; …… } main() { [auto] int x, y; …… if(xy) {int t; t=x; x=y; y=t; }…… } 【例7.4】 观察下面程序中自动变量的应用。 int max(int a,int b) {auto int d; d=ab?a:b; return(d); } main() {auto int a,b,c,m,n; scanf(%d,%d,%d,a,b,c); m=max(a,b); n=max(m,c); printf(max=%d,n); } a,b,c 作用域 a,b,d作用域 5 3 a b 5 3 a b 7 5 c m 7 n 5 d 5 7 a b 7 d 自动变量的特点: 作用域小、生存期短, 生存期和作用域一致。 作用范围为所定义的 函数或复合语句。 存储单元是动态分配的。 【例7.11】分析下列程序的输出,观察形参的改变是否影响实参。 程序如下: fun1(int x, int y) { int temp; temp=x; x=y; y=temp; printf(“x=%d,y=%d\n,x,y); } a=10, b=20 x=20, y=10 a=10, b=20 #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 10 20 x y 20 10 §7.4 函数间的数据传送 参数传递有值传递和地址传递两种。 §7.4.1用数据的复制方式传送数据 这种调用方式,实参是表达式,形参是变量。 传值调用:实参的值传送给形参变量,如果被调用函数改 变了形参变量的值,并不会影响实参的内容。 也称为单向传递。 在调用函数时,才为形参变量分配存储单元,调用函数将 实参的值对应地传送给形参变量。 当实参为变量时,调用期间该实参变量和对应的形参 变量占用不同的存储单元。 实参变量和形参变量可使用相同的名字,但它们是同 名的不同变量。 缺点:不能通过值传递返回变量的值。 §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; s

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档