c++變數的儲存類有如下四種:
自動類 對應auto;
寄存器類 對應register;
外部類 對應extern;
靜態類(包括內部靜態類和外部靜態類) 對應static;
1、自動類和寄存器類
自動類和寄存器類變數都是局部變數,定義或說明自動類變數時可以加auto也可以不加,但是定義寄存器變數必須加register;寄存器類型變數通常被存放在CPU的通用寄存器中,她只是告訴編譯器相關的變數應該改量儲存在高速度的寄存器中,以提高執行速度,但是,register聲明只是向編譯器所提出的“建議”,並非強制要求。
自動類變數和寄存器類變數範圍和存在性是一致的,“同存同滅”;
自動類和寄存器變數定義和說明後沒有預設值,只有被初始化或賦值後才可使用。
2、外部類變數
外部類變數的範圍最大,它的範圍是整個程式,外部類變數的定義和說明是兩回事,這是它的一個特點。外部類變數在一個程式中只能定義一次,但可以說明多次。定義外部類變數時不需加任何儲存類說明符,只要寫在函數體外就可以了,但說明時,必須加說明符extern,一般在引用前需要說明。如下:
#include <iostream>
using namespace std;
extern int x=1//外部類變數
void m()
{
x=x+1;
cout<<x<<endl;
}
void n()
{
x=x-1;
cout<<x<<endl;
}
void main()
{
int x=0;
cout<<x<<endl;
m();
n();
cout<<x<<endl;
}
運行結果:
3、靜態類變數——見這兒
給出從百度搜到的一個還可以的例子,大家可以仔細研究下
#include <iostream>
using namespace std;
int n=1;
void func();
void main()
{
static int x=5;
int y;y=n;
cout<<"MAIN:"<<x<<" "<<y<<" "<<n<<endl;// 輸出main靜態局部x=5、main局部y=1,全域n=1
//結果MAIN:511
func();//輸出func靜態局部x=4+2=6、局部變數y=10+11=21、全域n=1+10=11
//結果FUNC:62111
cout<<"MAIN:"<<x<<" "<<y<<" "<<n<<endl;// x和y同第一個注釋,但是全域n變成11
//結果MAIN:5111
func();// 輸出func靜態局部x=6+2=8、局部變數y=10+21=31、全域n=11+10=21
//結果FUNC:83121
}
void func()
{
static int x=4;int y=10;
x=x+2; n=n+10; y=y+n;
cout<<"FUNC:"<<x<<" "<<y<<" "<<n<<endl;
}