版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章函数1.熟练掌握用户函数的结构、设计方法和调用方法;2.熟练掌握函数调用中数据传递的几种方法;3.会设计简单的函数和函数的嵌套调用学习目标
根据变量所占存储单元的时间来划分,可以将其分为静态
存储变量和动态存储变量。
静态存储变量在程序运行过程中一直占有固定的存储单元,
直到程序运行结束。
动态存储变量是在程序运行过程中由系统动态地分配和回收的。
因此,全局变量是静态存储的变量,在程序运行过程中,它们的存储单元地址是不变的。而局部变量,它们是动态存储的变量。只有在调用函数时,系统才为其分配存储单元,一旦调用结束,该存储单元即由系统收回。当再次调用函数时,系统将重新为它们分配存储单元,二次分配的存储单元可能是不同的。6.6动态存储变量与静态存储变量C语言提供四种存储类型说明符,用于在定义变量时指定不同的变量存储方式,与类型说明符配合使用。存储类型说明符:
auto、static、register、extern它们分别对应自动变量、静态变量、寄存器变量和外部变量。存储类型说明符使用格式:存储类型说明符类型说明符变量名1,变量名2,……;1.auto变量用存储类型说明符auto修饰的局部变量称为为自动变量,自动变量是动态存储的变量。C语言规定,在定义局部变量时,如果缺省存储类型说明符,则默认其为auto变量。由于全局变量是静态存储的变量,所以在定义全局变量时,不能使用存储类型说明符auto。
【例6-14】通过将局部变量定义为静态存储变量的方法计算1!,2!,….n!。
2.用static将局部变量定义为静态存储的变量
虽然局部变量是动态存储的变量,但可以用存储类型说明符static将其定义为静态存储的变量。这样,一旦系统为其分配了存储单元,就一直由该变量占有该存储单元,直到程序运行结束才将其收回。
longfac(intk){staticlongf=1;f=f*k;returnf;}main(){inti,n;printf("Pleaseinputaninteger:\n");scanf("%d",&n);for(i=1;i<=n;i++)printf("%d!=%ld\n",i,fac(i));}调用结束时,保留静态存储变量f的当前值作为下次调用时的初始值
第i次调用函数fac(),得到的是i!的值3.register变量为了减少访问内存变量所需的时间,C语言允许将局部变量的值放在CPU的寄存器中。register变量是动态存储的变量。实际上,现在的优化编译系统能自动识别使用频繁的变量,并将其存放在寄存器中,不必再由编程人员定义register变量。【例6-15】存储类型说明符extern应用举例。
#include<stdio.h>
intmax(intx,inty){intz;z=(x>y)?x:y;returnz;}
voidmain(){
externa,b;
printf(“%d\n”,max(a,b));}inta=13,b=14;4.用extern声明全局变量在C程序中,可以通过存储类型说明符extern扩大全局变量的作用域。extern声明全局变量a、b,从而使它们的作用域扩大为从本行直至最后的所有语句,否则,程序将出错
存储类型说明符extern在多个源文件组成的程序中的应用
源文件1源文件2inta,b,c;
externinta;main()
intb,c;{
f(inta,intx)
…;{}……;}
在源文件1中定义了全局变量a、b、c,其作用域为整个源文件1。源文件2一开始就用extern声明变量a,表明其中的变量a与源文件1中的变量a是同一个变量。而源文件2中的全局变量b,c未用extern声明,它们的作用域为整个源文件2,和源文件1中的变量b,c是不同的变量。如果不希望在其它的源文件中使用源文件1的全局变量a,可以用staticinta;定义全局变量a,在其前面冠以static,这样,只有源文件1可以使用全局变量a。
6.7内部函数和外部函数一.内部函数如果一个函数只能被本源文件中的其它函数所调用,则称为内部函数。定义内部函数的格式:
static类型标识符函数名(形参表)例如:
staticintf(inta,intb);使用内部函数,可以使函数只局限于所在源文件,允许在不同的源文件中使用同名的内部函数。二.外部
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 职业卫生管理部门岗位责任制培训
- 新建玻璃切割设备生产项目可行性研究报告
- 竹产业园可行性研究报告
- 2026年广东省湛江市单招职业倾向性测试题库带答案详解(预热题)
- 2026年山西省财政税务专科学校单招职业技能考试题库附答案详解(完整版)
- 2026年广东省单招职业倾向性测试题库附参考答案详解(典型题)
- 2026年广西体育高等专科学校单招职业适应性考试题库附答案详解(完整版)
- 2026年广东江门中医药职业学院单招综合素质考试题库附参考答案详解(b卷)
- 2026年岳阳现代服务职业学院单招职业技能测试题库附参考答案详解(能力提升)
- 2026年常德科技职业技术学院单招职业倾向性考试题库含答案详解(培优a卷)
- 脑梗的观察与护理
- Q-JJJ 9002-2025 铁路建设项目安全穿透式管理实施指南
- 坐校车安全教育
- 健康类直播课件
- 2025年高校教师资格证之高等教育法规题库(综合题)
- 学校食堂员工培训课件
- DB11∕T 1448-2024 城市轨道交通工程资料管理规程
- 房屋测绘单位管理制度
- 热电厂中水供水工程可行性研究报告
- 2025年中考数学压轴专题汇编(江苏专用)压轴专题09定角定高模型(原卷版+解析)
- 开票提额合同协议
评论
0/150
提交评论