C语言教程第五章:函数
日期:2008年4月14日 作者: 查看:[大字体 中字体 小字体]-
变量的存储方式可分为“静态存储”和“动态存储”两种。
静态存储变量通常是在变量定义时就分定存储单元并一直保持不变, 直至整个程序结束。5.5.1节中介绍的全局变量即属于此类存储方式。动态存储变量是在程序执行过程中,使用它时才分配存储单元, 使用完毕立即释放。 典型的例子是函数的形式参数,在函数定义时并不给形参分配存储单元,只是在函数被调用时,才予以分配, 调用函数完毕立即释放。如果一个函数被多次调用,则反复地分配、 释放形参变量的存储单元。从以上分析可知, 静态存储变量是一直存在的, 而动态存储变量则时而存在时而消失。我们又把这种由于变量存储方式不同而产生的特性称变量的生存期。 生存期表示了变量存在的时间。 生存期和作用域是从时间和空间这两个不同的角度来描述变量的特性,这两者既有联系,又有区别。 一个变量究竟属于哪一种存储方式, 并不能仅从其作用域来判断,还应有明确的存储类型说明。
在C语言中,对变量的存储类型说明有以下四种:
auto 自动变量
register 寄存器变量
extern 外部变量
static 静态变量
自动变量和寄存器变量属于动态存储方式, 外部变量和静态变量属于静态存储方式。在介绍了变量的存储类型之后, 可以知道对一个变量的说明不仅应说明其数据类型,还应说明其存储类型。 因此变量说明的完整形式应为: 存储类型说明符 数据类型说明符 变量名,变量名…; 例如:
static int a,b; 说明a,b为静态类型变量
auto char c1,c2; 说明c1,c2为自动字符变量
static int a[5]={1,2,3,4,5}; 说明a为静整型数组
extern int x,y; 说明x,y为外部整型变量
下面分别介绍以上四种存储类型:
一、自动变量的类型说明符为auto。
这种存储类型是C语言程序中使用最广泛的一种类型。C语言规定, 函数内凡未加存储类型说明的变量均视为自动变量, 也就是说自动变量可省去说明符auto。 在前面各章的程序中所定义的变量凡未加存储类型说明符的都是自动变量。例如:
{ int i,j,k;
char c;
……
}等价于: { auto int i,j,k;
auto char c;
……
}
自动变量具有以下特点:
1. 自动变量的作用域仅限于定义该变量的个体内。在函数中定义的自动变量,只在该函数内有效。在复合语句中定义的自动变量只在该复合语句中有效。 例如:
int kv(int a)
{
auto int x,y;
{ auto char c;
} /*c的作用域*/
……
} /*a,x,y的作用域*/
2. 自动变量属于动态存储方式,只有在使用它,即定义该变量的函数被调用时才给它分配存储单元,开始它的生存期。函数调用结束,释放存储单元,结束生存期。因此函数调用结束之后,自动变量的值不能保留。在复合语句中定义的自动变量,在退出复合语句后也不能再使用,否则将引起错误。例如以下程序:
main()
{ auto int a,s,p;
printf("\ninput a number:\n");
scanf("%d",&a);
if(a>0){
s=a+a;
p=a*a;
}
printf("s=%d p=%d\n",s,p);
}
s,p是在复合语句内定义的自动变量,只能在该复合语句内有效。而程序的第9行却是退出复合语句之后用printf语句输出s,p的值,这显然会引起错误。
3. 由于自动变量的作用域和生存期都局限于定义它的个体内( 函数或复合语句内), 因此不同的个体中允许使用同名的变量而不会混淆。 即使在函数内定义的自动变量也可与该函数内部的复合语句中定义的自动变量同名。例5.14表明了这种情况。 - 上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] 下一页
-
- C语言教程第五章:函数 相关文章:
- ·C语言教程第五章:函数
- ·Excel XP函数实用教程精华集
- ·C语言的常用库函数使用方法分析及用途
- ·ASP函数库
- ·用正则表达式函数验证身份证号码合法性
- ·巧用Excel函数来实现工作表间的数据关联
- ·Excel中自定义函数实例剖析
- ·C/C++中回调函数初探
- ·Oracle常用的OCI函数
- ·C++类静态数据成员与类静态成员函数
- C语言教程第五章:函数 相关软件
- ·TC2.0库函数查询 V1.0
- ·Win32的Internet函数说明
- ·数学函数图象生成器 V1.0.0
- ·delphi函数
- ·DrawTools 函数绘图软件 V2.5
- ·飞飞函数图像 V1.1.0.83
- ·库函数速查字典 V4.0
- ·纵横函数图像 V2.0.1
- ·丽景函数分析作图器 V2.2
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:C语言基础教程(五)函数
下一篇:C语言教程第七章:结构与联合
精品推荐
热点TOP10
- ·C语言教程第六章:指针
- ·C/C++笔试、面试题目大汇总
- ·C语言教程第五章:函数
- ·C语言程序源代码下载
- ·学生成绩管理系统实习
- ·C#基础概念二十五问
- ·C语言的常用库函数使用方法分析及用途
- ·c语言中的结构(struct)和联合(union)简介
- ·socket编程原理
- ·C语言运算符
- ·makefile规则
- ·数据结构C语言实现系列——线性表
- ·Windows下C语言网络编程快速入门
- ·c#.net连接access操作类
- ·C语言常用的三种排序方法总结与探讨
- ·打字游戏
- ·Windows编程基础 - 概述
- ·利用C++实现的贪吃蛇游戏
- ·《c语言程序设计》第六章:指针
- ·飞机订票系统设计
特别推荐
- ·C语言常用的三种排序方法总结与探讨
- ·C/C++笔试、面试题目大汇总
- ·C#基础概念二十五问
- ·利用C#远程存取Access数据库
- ·入门教程:实例详解C++友元
- ·C语言基础教程(三)输入输出函数及控制流程语句
- ·VC下调用ACM音频编程接口压缩Wave音频
- ·如何在C/C++中调用Java
- ·设计的一个计算器类的源代码,很简陋哦,请各位高手不要见笑!
- ·gSOAP中内存的使用
- ·Windows下C语言网络编程快速入门
- ·C语言教程第六章:指针
- ·漫谈C++ Builder多线程编程技术
- ·学生成绩管理系统实习
- ·用C#实现pdf文件的完整性验证
- ·将程序从托管扩展 C++ 迁移到 C++/CLI(1)
- ·链表的c语言实现(六)
- ·C语言库函数 (D类字母)
- ·用AVIFile函数制做AVI文件基本步骤
- ·利用C++实现的贪吃蛇游戏
