今日群裡有人問了一段**為何無法執行,**簡化如下:
do
while(y==1)
我稍加思索以後認為是**塊作用域的問題,就是定義完y以後,退出該**塊,y也就隨之消失了。我記得所學的static這個關鍵字可以宣告乙個靜態變數,就認為在int y=1之前加上static就可以增加變數的作用域,然後做了一下嘗試
do
while(y==1)
結果:error c2065: 「y」: 未宣告的識別符號。
查閱資料以後發現,在區域性變數宣告前加標示符static 只會使變數變為靜態的,但還是區域性的。
區域性變數:它始終駐留在全域性資料區,直到程式執行結束。但其作用域為區域性作用域,當定義它的函式或語句塊結束時,其作用域隨之結束。
總結:在使用乙個變數的時候要注意宣告變數的位置(當然編譯器會檢查出來你的問題,不過仔細的程式設計是必須的)。
static 會使區域性變數變成靜態區域性變數,靜態區域性變數也受區域性作用域的限制,但是退出**塊的時候該變數變為不可見的,但變數未消失,變數的值將保留到下一次呼叫。
關於靜態變數與區域性變數
我們如果正常定乙個函式 void fun void 如果我們呼叫fun函式,那麼程式會在動態資料區的棧裡頭為區域性變數申請空間,然後執行相關的 進行操作。當fun函式執行完畢,tmp變數就會出棧,不復存在。但是如果我們進行如下的操作 int global tmp null void fun else...
引用與區域性變數的返回問題
今天剛相對徹底的搞懂函式返回區域性普通變數 不包括指標和引用 與區域性指標 引用的返回區別,先看下面 include include using namespace std string version1 const string s1,const string s2 const string ve...
引用與區域性變數的返回問題
今天剛相對徹底的搞懂函式返回區域性普通變數 不包括指標和引用 與區域性指標 引用的返回區別,先看下面 include include using namespace std string version1 const string s1,const string s2 const string ve...