二级C语言考试辅导教程第五章:函数[8]

二级C语言考试辅导教程第五章:函数[8],第1张

二级C语言考试辅导教程第五章:函数[8],第2张

2.外部变量可以加强功能模块之间的数据联系,但也使功能依赖于这些变量,从而降低了功能的独立性。这从模块化编程的角度来看是不利的,所以在不必要的时候尽量不要使用全局变量。
3。在同一个源文件中,全局变量和局部变量允许同名。在局部变量范围内,全局变量不起作用。
[例5.13] int vs (int l,int w)
{
extern int h;
int v;
v = l * w * h;
return v;
}
main()
{
extern int w,h;
int l = 5;
printf("v=%d ",vs(l,w));
}
int l=3,w=4,h = 5;
在这个例子中,外部变量是在最后定义的,所以要使用的外部变量必须在前面的函数中说明。外部变量l,w与vs函数的形参l,w同名。所有的外部变量都是初始赋值的,l在mian函数中也是初始赋值的。执行程序时,调用printf语句中的vs函数。参数L的值应该是main中定义的L值,等于5。外部变量L对main没有影响;实际参数w的值是外部变量w的值,即4。进入vs后,这两个值传递给形参l,wvs函数中使用的H是外部变量,其值为5。所以V的计算结果是100,返回主函数后输出。变量的存储类型不同,本质上是因变量的存储类型相同。所谓存储类型,是指变量占用内存空的方式,也叫存储模式。资料来源:www.examda.com

变量的存储方式可分为“静态存储”和“动态存储”。

静态存储变量通常在定义变量时划分存储单元,并保持不变,直到整个程序结束。5.5.1节介绍的全局变量就属于这种存储方式。动态存储变量只有在程序执行过程中使用时才被分配存储单元,使用后立即释放。一个典型的例子是函数的形参。定义函数时,不为形参分配存储单元,只有调用函数时才分配,调用函数后立即释放。如果一个函数被多次调用,参数变量的存储单元会被反复分配和释放。从上面的分析可以看出,静态存储变量总是存在的,而动态存储变量有时存在,有时消失。我们也把这种由于变量的存储方式不同而导致的特征称为变量的生存期。生存期表示变量存在的时间。和lifetime scope从时间和空两个不同的角度描述变量的特征,两者既有联系又有区别。变量属于哪种存储模式,不能只从它的作用域来判断,还应该有明确的存储类型描述。

在C语言中,变量的存储类型有四种:
auto自动变量
寄存器变量
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是外部整数变量
下面分别介绍四种存储类型:

1.自动变量的类型说明符是auto。
这种存储类型是C语言程序中使用最广泛的类型。根据C语言,函数中所有没有存储类型描述的变量都被视为自动变量,也就是说,自动变量可以省略说明符auto。前几章程序中定义的变量都是没有存储类型说明符的自动变量。例如:
{int i,j,k;
char c;
……
}相当于:{auto int i,j,k;
自动计费c;
……
}
自动变量具有以下特征:
1 .自动变量的范围仅限于定义它的个人。函数中定义的自动变量只在函数内有效。复合语句中定义的自动变量只在该复合语句中有效。例:
int kv(int a)
{
auto int x,y;
{ auto char c;
} /*c的作用域*/
…………
}/* A,X,Y的作用域*/

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 二级C语言考试辅导教程第五章:函数[8]

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情