c++變數的儲存類

來源:互聯網
上載者:User

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;
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.