13-的 多函数程序设计-3.pptVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
13-的 多函数程序设计-3

《解析C程序设计》第2章 简单程序设计 13 多函数程序设计-3 变量存储类型和变量作用域 本讲重点 预习检查 例7.8 变量作用域 变量存储类型 * 涉及的语法 -变量的作用域 作用域:即作用范围 可分为: 局部变量 全局变量 * 例7.8 #include stdio.h void Swap(int a, int b); int main() { int a=5, b=9; Swap(a, b); printf(In main():a = %d, b = %d\n, a, b); return 0; } void Swap(int a, int b) { int temp; temp = a; a = b; b = temp; printf(In Swap():a = %d, b = %d\n, a, b); } * 为什么没有交换成功? 没有交换成功的原因 主函数中的实参a,b与Swap函数中的形参a,b分别是两个不同作用域中的局部变量。相当于两人重名。可以查看watches里的a,b,会发现,这两个a,b的地址不同,说明不是同一个变量。 函数调用时,参数传递相当于“复印”。即把实参的值“复印”了一份,实参是“原件”,形参是“复印件”。因此,在“复印件”(形参)上做的修改不会影响“原件”(实参)。 * 实参与形参地址不同 * 涉及的语法知识 变量按作用域分类,可分为 局部变量 全局变量 * 局部变量 局部变量 在语句块内(即{ }内)定义的变量 形式参数也是局部变量 特点 定义时不会自动初始化,除非程序员指定初值 进入语句块时获得内存,仅能由语句块内语句访问,退出语句块时释放内存,不再有效 并列语句块各自定义的同名变量互不干扰 * 全局变量 全局变量 在所有函数之外定义的变量,一般初值为0 特点 默认作用范围:在源程序.c中,从定义它的位置以后都有效 从程序运行起即占据内存,程序运行过程中可随时访问,程序退出时释放内存 使函数之间的数据交换更容易,也更高效 但是尽量少用,因为谁都可以改写全局变量,所以很难确定是谁改写了它 破坏了函数的独立性(封装性)在 定义点之前或在其他.c文件中引用,应该进行如下声明: extern 类型名 变量名; * 这样可以交换a,b? #include stdio.h void Swap(int a, int b); int a=5, b=9;//全局变量 int main() { Swap(a, b); printf(In main():a = %d, b = %d\n, a, b); return 0; } void Swap(int a, int b) { int temp; temp = a; a = b; b = temp; printf(In Swap():a = %d, b = %d\n, a, b); } * 此处的a,b与主函数中的a,b还不是同一个。 实参与形参还是不同 * 这样呢? #include stdio.h void Swap(  ); int a=5, b=9;//全局变量 int main() { Swap( ); printf(In main():a = %d, b = %d\n, a, b); return 0; } void Swap(   ) { int temp; temp = a; a = b; b = temp; printf(In Swap():a = %d, b = %d\n, a, b); } * 全局变量虽好用但也不能轻易使用 * 虽然得以解决,但并不是一个好办法! 为什么? 因为它破坏了函数的封闭性! 学指针的时候我们会学另外一种方法! 即便要用全局变量,一般也是在只读不写的时候才用! 如何计算递归函数被调用的次数? #include stdio.h int i=0; int Gcd(int a,int b); int main() { int a=132, b=64; printf(Gcd(%d,%d)= %d,\n, a,b,Gcd(a,b)); printf( 递归函数被调用 %d 次,i); return 0; } int Gcd(int a,int b) {//方法三:递归 i++; if(ab) return Gcd(b,a-b); else { if (ab) return Gcd(a,b-a); else return a; } } * 例2-1 #include stdio.

文档评论(0)

liwenhua00 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档