设为首页 加入收藏

TOP

菜鸟问与答(变量和数据存储)
2014-11-23 21:26:51 】 浏览:6321
Tags:菜鸟 变量 数据 存储

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语言基础(04-运算符和表达式) 下一篇C语言基础(06-逻辑运算符和逻辑表..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目