网站大量收购闲置独家精品文档,联系QQ:2885784924

第八章函数试卷.ppt

  1. 1、本文档共84页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
存储空间可以分为三部分: 程序区 静态存储区 动态存储区 存储空间分类 定义变量和函数有两个属性 数据类型:如整型、字符型等 数据的存储类别:数据在内存中存储的方式 静态存储类和动态存储类 包括 自动的(auto) 静态的(static) 寄存器的(register) 外部的(extern) auto变量 函数中的局部变量,如不专门声明为static存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。 包括:函数中的形参、函数中定义的变量 功能:调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间 int f(int a) /*定义f函数,a为形参 */ { auto int b,c=3; /*定义b、c为自动变量 */ } static声明局部变量 功能:局部变量的值在函数调用结束后不消失而保留原值。 static的说明 1.静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,占动态存储区空间而不占静态存储区空间,函数调用结束后即释放。 2.对静态局部变量是在编译时赋初值的,即只赋初值一次,在程序运行时它已有初值。以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。而对自动变量赋初值,不是在编译时进行的,而是在函数调用时进行,每调用一次函数重新给一次初值,相当于执行一次赋值语句。 static的说明 3.如在定义局部变量时不赋初值的话,则对静态局部变量来说,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)。而对自动变量来说,如果不赋初值则它的值是一个不确定的值。这是由于每次函数调用结束后存储单元已释放,下次调用时又重新另分配存储单元,而所分配的单元中的值是不确定的。 4.虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的。 static的例子:输出1到5的阶乘值 #include stdio.h void main() { int fac(int n); int i; for(i = 1; i = 5; i++) printf(“%d!=%d\n”, i, fac(i)); } int fac(int n) { static int f = 1; f = f*n; return f; } register变量 CPU 内存 CPU 寄存器 寄存器 register的说明 为提高执行效率,C语言允许将局部变量的值放在CPU中的寄存器中,需要用时直接从寄存器取出参加运算,不必再到内存中去存取。由于对寄存器的存取速度远高于对内存的存取速度,因此这样做可以提高执行效率。这种变量叫做寄存器变量,用关键字register作声明。 extern声明外部变量 外部变量是在函数的外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为程序中各个函数所引用。编译时将外部变量分配在静态存储区。 有时需要用extern来声明外部变量,以扩展外部变量的作用城。 用extern将外部变量的作用域扩展到其他文件。 本程序的作用是给定b的值,输入a和m,求a×b和am的值。 static声明外部变量 有时在程序设计中希望某些外部变量只限于被本文件引用,而不能被其他文件引用。这时可以在定义外部变量时加一个static声明。 例如: file1.c file2.c static int A; extern int A; void main ( ) void fun (int n) { { … … A=A*n; } } 变量的声明和定义 定义性声明:简称定义,需要建立存储空间 int a; 引用性声明:简称声明,不需要建立存储空间 extern int a; 存储类别小结 从作用域角度分,有局部变量和全局变量。 局部变量 |自动变量,即动态局部变量(离开函数,值就消失) |静态局部变量(离开函数,值仍保留) |寄存器变量(离开函数,值就消失) |(形式

文档评论(0)

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

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

1亿VIP精品文档

相关文档