您的位置:首页 > 编程语言 > C语言/C++

C语言中的变量的存储类型

2013-09-01 20:54 267 查看
1、动态存储于静态存储方式

可以从变量值的存在的时间(生存期)角度来分,分为静态和动态存储方式。

简单来说静态存储方式是指在程序运行期间由系统固定的分配固定的的存储空间的方法,动态存储的方式的是程序运行期间动态的分配内存

首先供用户使用的内存主要分为三部分:程序区、静态存储区、动态存储区。

全局变量存放在静态存储区。动态存储区中主要存放以下内容:1、函数形参,调用时给函数形参分配内存。2、自动变量3、函数调用时的现场保护和返回地址

在没有特殊声明的情况下,变量的类型是atuo类型,动态的分配内存的方法。

下面重点学习一下用static声明局部变量:

在使用完一些变量的时候不消失而保留它原来的值,以便下次函数调用时简单的方法就是用关键字static。对于静态变量,需要注意的几点是:

1、静态局部变量属于静态存储类别,在静态存储区分配存储单元,整个程序运行期间都不会释放

2、静态局部变量是在编译的时候赋值,即只赋值一次,在程序运行的时候已经有初值,每次调用函数的时候会直接使用上次调用结束的时候的值

3、初始情况下不赋值的话,编译的时候自动赋值为0.

下面学习一下register变量:

通常情况下变量是放在内存中的,,由控制器发出指令将内存中的变量送到运算器中,当一些变量频繁使用的时候,为了减少存取的时间会使用register关键字

在使用register关键字的时候需要注意的是:

1、只有局部变量和形参可以作为寄存器变量,全局变量是不行的,在调用一个函数的时候占用一个寄存器来存放寄存器变量,函数调用结束的时候释放寄存器,以后再调用另外一个函数的时候可以存放其他函数的寄存器比变量。

2、寄存器的数量是有限的,有的系统只允许定义整形和char性作为寄存器变量

3、局部静态变量不能定义为寄存器变量。

下面学习一下extern声明外部变量

外部变量是在函数外部定义的全局变量,它的作用域是变量的定义处开始定义,到本程序的末尾。在此作用域内,全局变量可以为程序中各个函数所使用。编译的时候分配在静态存储区。

在这里需要注意的一点是:如果这个变量不想定义在文件袋额开头,那么他的有效范围是从定义的位置开始,到文件的结尾结束。如果在定义之前想要这个变量的话,必须使用extern 关键字来声明。

这个关键字还有一个作用是:在一个C程序中可能有很多源文件组成,在两个或者多个文件中都使用到这个变量例如A的时候,不能在两个文件中都定义这个变量,否则的话就会出现重复定义的错误,这样的话再一个文件中定义了之后,在另外一个文件的开头声明extern A。

下面学习一下用static关键字来声明外部变量

在有些程序中,有些外部变量只限于被本文件引用,而不能被其他文件引用。这时候需要在外部变量加以static声明

总结

1、从作用域的角度来看,有局部变量和全局变量之分

自动变量,即动态局部变量(离开函数就会消失)
静态局部变量(离开函数值仍保留)
寄存器变量(离开函数,值就消失)
局部变量 (形参只能使用自动变量和寄存器变量)

作用域:
静态外部变量(只限本文件使用)
全局变量 外部变量(允许其他文件使用)

2、从变量的存在的时间(生存期)来看,有动态和静态存储之分。静态存储在整个程序运行的时间都存在,而动态存储则是调用函数的时候临时分配的单元

自动变量
动态存储 寄存器变量
形参

变量存在的时间

静态局部变量
静态存储 静态外部变量
外部变量

3、从变量存放的位置来看,可以分为

静态局部变量

内存中的静态存储区 J静态外部变量

外部变量

内存中位置 内存中的动态存储区 自动变量和形参

CPU中的寄存器 寄存器变量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: