c++变量的存储类型

存储类型是对于变量而言的。一方面,它可以反映变量的存储空间的位置,另一方面它可以反映变量的生存期。
c++的存储类型有四种,自动类型、静态类型,寄存器类型和外部类型。
其格式如下:
<存储类型> <数据类型> <变量名>;

1.自动类型

示例:

auto int x;

特点:
1.采用动态分配方式,在栈区分配空间。当超出作用域时,自动释放空间。
2.在函数内或语句内声明时,可省略atuo关键字。
这个类型是我们常用的类型。

2.寄存器类型

示例:

register int x;

特点:
1.将变量放在寄存器内,可以加快运行速度。
2.若寄存器被其它了类型 数据占据,则寄存器类型的数据会自动被当作auto变量。

3.静态类型

静态类型分全局静态和局部静态两种。局部静态变量有两大特点,
1.静态局部变量虽然具有局部变量的作用域,但却有全局变量的生存期。
2.静态局部变量只在第一次执行时进行初始化。
示例:

#include<iostream>

using namespace std;

void count()
{
    int i = 0;
    static j = 0;
    i++;
    j++;
    cout<<"i = "<<i<<",j = "<<j<<endl;

}

int main()
{
    for(int i=0;i<3;i++)
        count();

    return 0
}

运行结果如下:

i=1,j=1
i=1,j=2
i=1,j=3
4.外部类型

外部变量使用关键字extern来声明。在c++中,只有两种情况下才使用外部变量。
(1).在同一文件中,若变量使用在前,声明在后,则在使用前要声明为外部变量。
(2).当有多个文件组成一个完整的程序,且某一个源文件的变量被其它一个或多个文件引用时,在引用的文件里要用extern对该变量做外部声明。
注意声明与定义的区别,extern定义只能有一个,声明可以有多个。
示例:

/*function.cpp*/
int x = 1;//外部定义,只能有一个
....................
....................
/*function1.cpp*/
extern int x;//外部声明,可以有多个
....................
....................
/*function2.cpp*/
extern int x;//外部声明,可以有多个
....................
....................

如果在某一文件里出现如下:

/*function3.cpp*/
extern int x =2;//外部定义

则会出现重复定义的错误,因为function.cpp和function3.cpp里都对x进行了定义。

实际上,通常我们会将全局变量和全局函数放在一个cpp文件里,而将对应的全局变量和函数的声明放在同名的头文件里,示例:

/*function.h*/
#ifndef _FUNCTION_H_
#define _FUNCTION_H_

extern int X;
extern int Y;
int add(int X, int Y);

#endif


/*function.cpp*/
#include "function.h" 
int x = 10;
int y = 20;

 int add(int a, int b)
{
    return a + b;
}


/*main.cpp*/
#include "Demo.h"
#include <iostream>
using namespace std;

int main()
{
    cout << "x = " << x << ", y = " << y << endl;

    int c = add(1, 2);
    printf("c = 1 + 2 = %d \n", c);

    return 0;

}

这样处理之后只需要到用到的地方加入相应的头文件即可,例如上述程序中的function.h,从而避免了在每个文件里进行extern声明。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值