變數屬性歸納小結

來源:互聯網
上載者:User

一個多月前開始學c與c++,可是感覺進步根本不大,究其原因,其一時間花的不多應該是原因,另一原因可能是最重要的原因吧,方法不對。

所以,很多人和我說,如果你每天堅持學一點,每天堅持總結,做筆記,你應該進步會很大。好吧,我採納了。。

今天開始,隔三差五寫點自己學到的東西,這樣可以讓我更懂。

因為是很新很新的手,所以如果看到覺得幼稚就輕輕飄過吧,願意幫忙的請不吝賜教(肯定有錯的),謝了。

 

前段時間一直糾結一個問題,為什麼明明在函數裡的變數的值都已經改變了,而一返回主函數變數就變回來了(相信很多和我一樣的人也會疑惑吧),好在華哥說這是記憶體的一個問題,你現在就先記住吧。後來陸陸續續和我講了調用函數是怎麼分配記憶體的,但是應該還是不這麼懂。

 

今天看了這個變數屬性的小結,感覺有一點相關,就總結下。

 

首先變數屬性大概可以認為分成時間上的和空間上的,

我先簡單說說時間上的,這樣變數就分為全域變數和局部變數,

         局部變數就是僅僅實在一個函數裡有用(即它的範圍僅僅在這函數中),這裡注意對main函數也適用,不是感覺上main函數進階點。還有,上面我疑惑的問題中有關的就是,函數的調用中,形參就是局部變數。

       全域變數的範圍是從定義處到源檔案結束為止,這個應該很好理解,但是就像書上說的一樣,盡量不要用,很容翻譯搞混,而且全域變數一變就意味這可能很多地方就會變了,會使代碼失去可讀性和可靠性。

 

空間上的話,相對就複雜了。這就是變數的儲存期,可以分為四種儲存類型:auto,static,register,extern。就我理解的和看書的,我一個一個說過去。

auto:這是編譯系統自動分配空間的,就是動態儲存裝置,也就是前面所說的局部變數,我想這個就是我疑惑問題的根源吧。變數如果不在其範圍了,系統就會自動回收掉。我們定義的很多變數都是auto的,像int a,char c,等等都是auto類型的,只是省略了這個。所以如果我們沒有初始化auto類型的變數的話,它的值就是隨意的。

static:(僅對靜態局部變數說明)這類型是靜態儲存的,就是這個變數在整個程式中是不會被系統回收的,即使已經不在它的範圍了(但是這個時候是不可以引用的)。而如果寫下這個ststic int a;(static char c),a的初始值就是0(Null 字元),這就是與auto不同的地方。還有就是,這種類型的變數只被賦值一次(在編譯時間進行的) 。當然這個的缺點就是,要多佔用記憶體的;當再次調用這個變數,他的值是上次調用的儲存下的值,容易和全域變數一樣搞混,因此我想也盡量不要用吧。呵呵~~

register:這個都不這麼實用了,形象點就是你會經常把零錢放在好拿的口袋裡,而不放在錢包裡,register的性質類似零錢。(一句帶過吧,其實我也說不太清楚的,哈哈)

extern:有時候會用extern來擴大全域變數的範圍(1)如果是在一個檔案中,用extern聲明過的全域變數就可以在整個檔案用了(這個聲明叫提前引用聲明),而不是僅僅從定義處開始,這個作用有點像函數的聲明。(2)如果是在多個檔案中,用extern聲明過的可以講變數的作用擴發到所有檔案中(這個聲明叫外部變數聲明),當然這個和全域變數等是類似的,使用的時候要謹慎。

 

static:(這裡對靜態外部變數)加上static後這個變數的就僅僅適用於這個檔案中,這樣就可以避免很多人寫的程式合起來後不會混掉。

 

 

 

另外再大致分下,

      在靜態儲存區:1.靜態局部變數  2.靜態外部變數   3.外部變數

      在動態儲存裝置區:1.自動變數(局部變數) 2.形式參數    3.函式宣告那行括弧裡的變數

      在寄存器的:register變數

 

還有就是static的:1.在局部變數前加上static,是局部變數變成靜態局部變數,很明顯就是將動態儲存裝置變成了靜態儲存;

                                  2.在外部變數前加上static,就是將可以在多個檔案中使用的轉成僅僅可以在該檔案中使用,但是注意這兩者都是靜態儲存方式。

 

 

 

終於大致寫完了,其實我覺得我寫得很亂,連我自己都不知道寫什麼,很多都是按照書上順序下的,有木高手指點啊。。。

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.