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

C++ 变量存储类别 解析

2012-04-05 21:38 267 查看
动态存储方式与静态存储方式;

变量的属性作用域在空间的角度来分析,分为局部变量和全局变量

变量还有一种属性存储期(生命期)

这个属性可以分为{

动态存储期

静态存储期



这个分为是由变量的静态存储方式和动态存储方式决定的

存储空间可以分为三部分;

程序区

静态存储区

动态存储区

全局变量放在静态存储区

程序开始时,分配存储单元,结束时释放空间

程序执行时他们占据固定的存储单元,不是动态分配的

动态存储区放的是:函数形参,函数中的自动变量,函数调用时的现场保护和返回地址;

1、自动变量;

如果不是用static关键字加以声明,编译器会动态的分配存储空间

在函数结束是会释放这些空间

因此局部变量称为自动变量
自动变量用auto作存储类别的声明

默认都是自动变量

2、用static声明静态局部变量

在函数调用结束后不消失而保留原值,其占用的存储单元也不释放

在下次调用时该变量保留上一次函数调用结束时的值

附上一个小例子:

#include <iostream>
using namespace std;
int f(int a)
{
auto int b = 0;
static int c = 3;

b = b+1;
c = c+1;

return a+b+c;

}
int main (int argc, const char * argv[])
{

int a = 2;

for(int i=0;i<5;i++)
cout<<f(a)<<"\n";
return 0;

}

3、用register声明寄存器变量;

一般的变量都是存储在内存中的,在程序需要的时候,就把变量从内存中读取到运算器中,加入有个别的变量需要重复的用到,那么在读取内存变量的过程中就花费了大量的时间,所以可以通过register声明寄存器变量在运算器中,以提高运算速度;

4、用extern声明外部变量

全局变量(外部变量)

是在函数的外部定义的,作用域是从变量定义处开始到文件末尾。

但是如果你额外部变量不是在文件的开头定义,那么他的有效范围只限于文件定义处到文件末尾;

estern int a, a 是一个已经在别处定义的变量;

5、用static声明只限于本文件使用的外部变量

加入两个文件中都有number变量

file1中用static定义

file2即使用了extern也不能引用file1中的number变量

综上所述:

C++中允许四种存储类别

auto //字符型自动变量,在函数内定义

static //静态局部整形变量或静态外部整形变量

register //整形寄存器变量,在函数内定义

extern //声明一个已经定义的外部整形变量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: