《c语言程序创新设计基础》函数.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5.7.3 静态变量 #include stdio.h main() { void increment(void); //函数说明 increment(); increment(); increment(); } void increment(void) //函数定义 { auto int x=0; //每次进入函数都重新定义变量x并赋初值0 x++; printf(%d\n,x); } 5.7.3 静态变量 #include stdio.h main() { void increment(void); increment(); increment(); increment(); } void increment(void) { static int x=0; x++; printf(%d\n,x); } 5.7.4 外部变量 外部变量的类型说明符为extern。在函数外定义的变量若没有用 static说明,则是外部变量。外部变量只能隐式定义为extern类别,不能显式定义。 int c; static int a; main( ) { float x,y; … } char s; f( ) { static int b=1; … } 变量c是外部变量,a是全局静态变量,而x和y是自动变量,b是局部静态变量。 5.7.4 外部变量 外部变量的几个特点: ①外部变量和全局变量是对同一类变量的两种不同角度的提法。全局变量是从它的作用域提出的,外部变量从它的存储方式提出的,表示了它的生存期。 ②编译时,将外部变量分配在静态存储区,程序运行结束释放该单元。 ③构造类型的外部变量若定义时未赋初值,在编译时,系统自动赋初值为0。 ④外部变量的生存期是整个程序的执行期间。 ⑤当一个源程序由若干个源文件组成时,在一个源文件中定义的外部变量加以说明后在其它的源文件中也有效。 5.7.4 外部变量 需注意的是: ①外部变量声明用关键字extern,而外部变量的定义不能用extern,只能隐式定义。 ②定义外部变量时,系统要给变量分配存储空间,而对外部变量声明时,系统不分配存储空间,只是让编译系统知道该变量是一个已经定义过的外部变量,与函数声明的作用类似。 ③C程序可以是由一个或多个源程序文件组成,如果在由多个源程序文件程序中定义了外部变量,那么在使用时需对外部变量加以说明。 5.7.5 寄存器变量 寄存器变量存放在CPU的寄存器中,使用时不需要访问内存,而直接从寄存器中读写,这样可提高效率。对于循环次数较多的循环控制变量及循环体内反复使用的变量均可定义为寄存器变量。 对寄存器变量还要说明以下几点: ①只有局部自动变量和形式参数才可以定义为寄存器变量。 ②只有某些数据类型的变量可放在寄存器中,例如整型、字符型等。取地址运算符不能作用于寄存器变量。 ③即使能真正使用寄存器变量的机器,由于CPU 中寄存器的个数是有限的,因此使用寄存器变量的个数也是有限的。 #include stdio.h main( ) { long int sum=0; register int i; for (i=1; i=1000; i++) sum+=i; printf(sum=%ld\n ,sum); } 5.5.2调用与被调用函数间的地址传递 #include stdio.h void sort(int b[ ],int n); void printarr(int b[ ]); main( ) { int a[10] = {11,52,23,77,48,64,59, 32,93,38}; printf(Before sort:\n); printarr(a); sort(a,10); printf(After sort:\n); printarr(a); } void printarr(int b[10]) { int i; for (i=0; i10; i++) printf(%5d,b[i]); printf(\n); } 5.5.2调用与被调用函数间的地址传递 void sort(int b[ ], int n) { int i,j,t; for (i=1; in; i++) for (j=0; jn-i; j++ ) if (b[j]b[j+1]) {t=b[j];b[j]=b[j+1];b[j+1]=t; } } 5.5.2调用与被调用函数间的地址传递 5.5.2调

文档评论(0)

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

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

1亿VIP精品文档

相关文档