- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章--函数(最新的)讲解
③它降低函数的通用性,因为函数在执行时要依赖于其所在的外部变量。如果将一个函数移到另一个文件中,还要将有关的外部变量及其值一起移过去。但若该外部变量与其他文件的变量同名时,就会出现问题,降低了程序的可靠性和通用性。一般要求把C程序中的函数做成一个封闭体,除了可以通过“实参——形参”的渠道与外界发生联系外,没有其他渠道。 例 7.10 外部变量与局部变量同名 #include stdio.h int a=3,b=5; /* a,b为外部变量*/ a,b作用范围 max (int a, int b) /*a,b为局部变量 */ { int c; c=a>b?a∶b; 形参a、b作用范围 return (c); } void main ( ) { int a=8; /*a为局部变量 */ 局部变量a作用范围 printf(“%d”,max (a,b)); 全局变量b的作用范围 } 运行结果为 8 7.6 变量的存储类型和生存期 从变量的作用域(即从空间)角度来分,可以分为全局变量和局部变量。 从变量值的生存期(即存在的时间)角度来分,又可以分为静态存储方式和动态存储方式。 所谓静态存储方式是指在程序运行期间由系统分配固定的存储空间的方式。动态存储方式则是在程序运行期间根据需要进行动态的分配存储空间的方式。这个存储空间可以分为三部分: 1.程序区 2.静态存储区 3.动态存储区 在C语言中每一个变量和函数有两个属性:数据类型和数据的存储类别。 7.6.1 局部变量的存储类别 1. auto变量: 函数中的局部变量,若不专门声明static存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属此类,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。因此这类局部变量称为自动变量。自动变量用关键字auto作存储类别的声明。 例如: int f(int a) /*定义f函数,a为形参 */ {auto int b,c=3;/*定义b、c为自动变量 */ … } 2. 静态局部变量:当函数中的局部变量的值在函数调用结束后不消失而保留原值时,该变量称为静态局部变量。用关键字static进行声明。 例7.11 考察静态局部变量的值 #include stdio.h void main() {int f(int); int a=2,i; for(i=0;i<3;i++) printf(“%d”,f(a)); } int f(int a) { auto int b=0; static int c=3; b=b+1; c=c+1; return(a+b+c); } 对静态局部变量的说明: 1. 静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,占动态存储区空间而不占静态存储区空间,函数调用结束后即释放。 2. 对静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。 3.如在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量,int float char)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。 4. 虽然静态局部变量在函数调用结束后仍然存在,但其他函数不能引用它。 例7.12 输出1到5的阶乘值 #include stdio.h void main() { int fac(int n); int i; for(i=1;i<=5;i++) printf(“%d\n”,fac(i)); } int fac(int n) { static int f=1; f=f*n; return(f); } 3. 寄存器变量( register):变量的值是存放在内存中的。当程序中用到哪一个变量的值时,由控制器发出指令将内存中该变量的值送到运算器中。 经过运算器进行运算,如果需要存数,再从运算器将数据送到内存存放。 如果有一些变量使用频繁,则为存取变量的值要花费不少时间。为提高执行效率,C语言允许将局部变量的值放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存取。由于对寄存器的存取速度远高于对内存的存取速度,因此这样做可以提高执行效率。这种变量叫做寄存器
文档评论(0)