考试首页 | 考试用书 | 培训课程 | 模拟考场 | 考试论坛  
全国  |             |          |          |          |          |         
  当前位置:计算机等级 > 二级考试 > C语言程序设计 > C语言辅导 > 文章内容
  

全国计算机等级考试二级C语言入门教程(79)

中华IT学院   【 】  [ 2016年2月29日 ]

自动变量的类型说明符为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);

}

{ auto int a;

printf("\ninput a number:\n");

scanf("%d",&a);

if(a>0){

auto int s,p;

s=a+a;

p=a*a;

}

printf("s=%d p=%d\n",s,p);

}

s,p是在复合语句内定义的自动变量,只能在该复合语句内有效。而程序的第9行却是退出复合语句之后用 printf语

句输出s,p的值,这显然会引起错误。

3. 由于自动变量的作用域和生存期都局限于定义它的个体内( 函数或复合语句内), 因此不同的个体中允许使用同名
的变量而不会混淆。 即使在函数内定义的自动变量也可与该函数内部的复合语句中定义的自动变量同名。例 5.14表
明了这种情况。
[例5.14]
main()
{
auto int a,s=100,p=100;



printf("\ninput a number:\n");
scanf("%d",&a);
if(a>0)
{
auto int s,p;
s=a+a;
p=a*a;
printf("s=%d p=%d\n",s,p);
}
printf("s=%d p=%d\n",s,p);
}


本程序在 main函数中和复合语句内两次定义了变量s,p为自动变量。按照C语言的规定,在复合语句内,应由复
合语句中定义的s,p起作用,故 s的值应为a+ a,p的值为a*a。退出复合语句后的s,p 应为main所定义的s,p,其
值在初始化时给定,均为100。从输出结果可以分析出两个 s和两个p虽变量名相同, 但却是两个不同的变量。

4. 对构造类型的自动变量如数组等,不可作初始化赋值。

分享到:
本文纠错】【告诉好友】【打印此文】【返回顶部
将考试网添加到收藏夹 | 每次上网自动访问考试网 | 复制本页地址,传给QQ/MSN上的好友 | 申请链接 | 意见留言 TOP
关于本站  网站声明  广告服务  联系方式  站内导航  考试论坛
Copyright © 2006-2017 中华考试网(Examw.com) All Rights Reserved  营业执照