第六章_函数讲解.ppt

  1. 1、本文档共59页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第六章_函数讲解

例2:用递归方法求斐波那契数列第20项。 斐波那契数列: 1 1 2 3 5 8 13 21…… 6.5变量的作用域 变量的作用域就是变量的作用范围。 根据作用域,变量可分为 局部变量 全局变量 6.5.1局部变量 C语言中用花括号括起来代码块称为复合语句,又称作语句块,简称块。 在一个函数内部定义的变量或在一个语句块中定义的变量,就称为局部变量。 * 块作用域 例如: float f1(void) { int a,b; …… { int c; c=a+b; …… } …… } c只在该复合语句中有效 在f1函数内a,b始终 有效 6.5.1局部变量 局部变量的作用域为块作用域。 即其作用域限定在对应的语句块中,开始于变量的声明处,结束于块的结尾处 【例6.15】嵌套语句块的同名变量访问示例。 int main(void) { int i=1, j=2, k=3; printf(i=%-3d j=%-3d k=%-3d\n, i, j, k); /*A*/ { int i=10, j=20; /*B*/ k = i + j; /*C*/ printf(i=%-3d j=%-3d k=%-3d\n, i, j, k); /*D*/ } printf(i=%-3d j=%-3d k=%-3d\n, i, j, k); /*E*/ return 0; } 6.5.2全局变量 在函数和类外定义的变量,称为全局变量,全局变量也称为外部变量 全局变量的作用域为文件作用域,有效作用范围从变量定义处开始,到源程序文件结尾处结束。 全局变量系统自动初始化为0或NULL。 在函数中使用全局变量,一般应作全局变量说明,全局变量的说明符为extern。 应谨慎使用全局变量。 【例6.16】外部变量与局部变量同名。 int a=100, b=1; /*a,b为外部变量*/ int max(int a, int b) /*a,b为局部变量*/ { return ab?a:b; /*外部变量被屏蔽*/ } int main(void) { int a = 10; printf(%d\n, max(a, b)); } * 存储类规定了变量的生存期,即何时为变量分配内存空间以及何时回收为变量分配的内存空间。 程序在内存中占用的存储空间分为三部分: 分类 自动类型、静态类型、寄存器类型、外部类型 程序区 静态存储区 动态存储区 存放可执行程序的程序代码 指在程序运行期间分配固定的存储空间,如全局变量 指在程序运行期间根据需要进行动态分配存储空间,如局部变量,函数的形参变量等 6.6变量的存储类型 6.6.1动态存储方式与静态动态存储方式 作用域讨论的是变量的有效范围,是程序可访问该变量的区域。 存储类规定了变量的生存期,即何时为变量分配内存空间以及何时回收为变量分配的内存空间。 动态存储区用于存放动态存储变量。 静态存储区用于存放静态存储变量。 6.6.2auto变量 用关键字auto说明的局部变量都是自动存储类型变量。 动态存储变量,当执行到变量作用域开始处,动态地分配存储空间,当执行到结束变量作用域处收回空间。 C默认局部变量为auto,若未明确赋值,变量的初值不定。 6.6.3static变量 静态类型变量均有确定的初值,当说明变量未指定初值时,编译器设其初值为0; 在程序开始执行时为变量分配空间并赋初值,空间保留至程序结束。 static int a=5; void fun(void) { static int b; ...... } 【例6.17】静态变量存储特性示例。 void fun(void) { static int i; int j = 1; i += 10; j += 10; printf(i=%d j=%d\n, i, j); } int main(void) { fun(); fun(); } 6.6.4register变量 动态存储方式,不为该类型的变量分配内存空间,尽可能直接分配使用CPU上的寄存器,主要用于控制循环次数的临时变量。 reg

文档评论(0)

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

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

1亿VIP精品文档

相关文档