菜鸟问与答(变量和数据存储)

文章作者 100test 发表时间 2007:03:10 17:43:21
来源 100Test.Com百考试题网


1、变量有哪些存储类型?
变量的存储类型由“存储类型指明符”来说明。存储类型指明符可以是下列类键字之一:
auto
register
extern
static

下面是详细的解释:
auto 存储类指明符--用于说明具有局部作用域的变量,它表示变量具有局部(自动)生成期,但由于它是所有局部作用域变量说明的缺省存储类指明符,所以使用得很少。要注意的是,所有在函数内部定义的变量都是局部变量,函数内部定义的变量其作用域只在函数内部。它的生存期为该函数运行期间,一旦离开这个函数或这个函数终止,局部变量也随之消失。
register 存储类指明符--当声明了这个指明符后,编译程序将尽可能地为该变量分配CPU内部的寄存器作为变量的存储单元,以加快运行速度。注意,寄存器与存储器是不同的。寄存器一般在CPU内部,而存储器一般指外部的(比如内存条),CPU内部的寄存器其运算速度是很高的。当寄存器已分配完毕,就自动地分配一个外部的内存。它的作用等价于auto,也只能用于局部变量和函数的参量说明。 来源:www.examda.com   
static 存储类指明符--表示变量具有静态生成期。static变量的的特点是它离开了其作用域后,其值不会消失。
当回到该作用域之后又可以继续使用这个static变量的值。
例:利用static变量统计调用函数的次数
int two(). /*函数原型说明*/
void main()
{
int a=0.
a=two(). /*a的值等于1*/
a=two() /*a的值等于2*/
a=two(). /*a的值等于3*/
}

int two()
{
static int b=0.    /*定义了一个局部的static变量*/
b .
return b.
}

如果不是一个static变量就不会有这个效果了
int two(). /*函数原型说明*/
void main()
{
int a=0.
a=two(). /*a的值等于1*/
a=two() /*a的值等于1*/
a=two(). /*a的值等于1*/
}

int two()
{
int b=0.    
b .
return b.
}
变量a的值总是1,原因是在函数two()中,变量b不是一个static变量,其值随着离开two函数就消失了,当回到two函数时又被重新赋值0。



相关文章


C语言基础(07-C语言中的关键字)
C语言基础(06-逻辑运算符和逻辑表达式)
菜鸟问与答(变量和数据存储)
C语言基础(04-运算符和表达式)
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛