码迷,mamicode.com
首页 > 编程语言 > 详细

[C++]变量存储类别

时间:2015-01-06 13:42:54      阅读:288      评论:0      收藏:0      [点我收藏+]

标签:

C++中共有四种存储类别标识符:auto/static/register/extern

1.auto

函数或分程序内定义的变量(包括形参)可以定义为auto(自动变量)。如果不指定存储类别,则隐式定义为auto。

例如,函数类有如下定义:

  auto int x , y ; 

等价于:

  int x , y ;

2.static

除了形参,可以将局部变量和全局变量定义为静态变量。用static标识符。

static int a;//a是全局静态变量

f()

{static int b = 1;}//b是局部静态变量

与auto不同,static变量的生存期是程序开始运行到运行结束(auto变量生存期是函数调用结束)。

若定义静态变量时没有对其赋初值,系统自动赋初值0;若赋初值,则仅在编译时赋初值一次,程序运行后不再给变量赋初值。当上一次调用局部静态变量所在的函数时,该变量的值继续有效(为上次函数调用结束时保留的值)。

3.extern

在函数外定义的变量如果没有用static声明,则是extern外部变量。外部变量只能隐式定义为extern,不能显示定义。

对外部变量声明时,系统不分配存储空间。

#include <iostream>

using namespace std;
int x = 2 , y = 2 ;//定义外部变量
void f1()
{
    extern char c1 , c2 ;//声明外部变量
    cin>>c1>>c2;
}
char c1 , c2 ;//定义外部变量

int main()
{
    int m , n ;
    f1();
    cout <<c1<<"+"<<c2<<"="<<x+y<< endl;
    return 0;
}

结果是这样:

技术分享

注意,如果把extern去掉了,再输入xy,回车,会出现:

技术分享

因为c1,c2的作用域只在f1函数里面。如果不用extern,想达到第一幅的效果,只要把

char c1 , c2 ;//定义外部变量

这句拿到f1()前面就行了。

4.register

寄存器变量的值保存在CPU的寄存器中,读写速度更快。随着计算机硬件性能提高,现在寄存器变量使用得比较少了。

[C++]变量存储类别

标签:

原文地址:http://www.cnblogs.com/larrylawrence/p/4205672.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!