变量存储类型

emmmmmmmm,今天做题遇到了一个问题,一个变量的默认存储类型。

 

一、 首先来说说数据的类型,所有的数据都有两种类型,一是常见的数据类型,如int,float等,一种便是今天的重头戏,存储类型。总共有四种存储类型的变量,分别为自动变量(auto)、静态变量(static)、外部变量(extern)以及寄存器变量(register)。

    先回顾一下定义

    1、自动变量:函数中所有的非静态局部变量。

    2、静态变量:在变量前加上static关键字的变量。

    3、外部变量:一般用作全局变量作用域的扩展(还有定义外部函数的时候前面也可以有一个extern关键字,具体外部函数请看下面)。

    4、寄存器变量:一般经常被使用的的变量(如某一变量需要计算几千次)可以设置成寄存器变量,register变量会被存储在寄存器中,计算速度远快于存在内存中的非register变量。

    二、存储变量关乎着变量的作用域和生存时间

    1、从作用域(空间)的角度来看:

    

    自动变量:其作用域仅仅局限于其定义的函数中,存储在动态存储区,注意存储在动态存储区的数据,在没有显式初始化的时候,其变量的值是随机的,无用的。

    静态变量:存储在静态存储区,静态变量包括静态全局变量和静态局部变量,静态变量在没有显式初始化的时候会被初始化为0或者null,并且只初始化一次(初始化不等同于赋值)。

                         静态全局(外)变量:作用域只是在其定义的源文件中有效,对外部变量起到了“屏蔽”的作用。

                         静态局部变量:其作用域是其定义的函数中。

    外部变量:把全局变量在其他源文件中声明成extern变量,可以扩展该全局变量的作用域至声明的那个文件,其本质作用就是对全局变量作用域的扩展。

    寄存器变量:存储在cpu的寄存器中,速度快,一般不需要程序员定义寄存器变量,这是由于一些编译器会把需要参加很多次计算的变量转化成寄存器变量,不允许程序员对寄存器变量的地址进行操作。

    2、从生存时间的角度来看:

    自动变量:随着函数的进栈和出栈而创建和销毁

    静态变量:长期存在静态存储区,直到程序结束

    外部变量:长期存在静态存储区,直到程序结束

    寄存器变量:离开函数值就会消失

你可能感兴趣的:(数据存储类型)