什么是變量變量的存儲類型
什么是變量變量的存儲類型
變量來源于數(shù)學(xué),是計算機語言中能儲存計算結(jié)果或能表示值抽象概念。那么你對變量了解多少呢?以下是由學(xué)習(xí)啦小編整理關(guān)于什么是變量的內(nèi)容,希望大家喜歡!
變量的介紹
變量可以通過變量名訪問。在指令式語言中,變量通常是可變的;但在純函數(shù)式語言(如Haskell)中,變量可能是不可變(immutable)的。在一些語言中,變量可能被明確為是能表示可變狀態(tài)、具有存儲空間的抽象(如在Java和Visual Basic中);但另外一些語言可能使用其它概念(如C的對象)來指稱這種抽象,而不嚴格地定義“變量”的準確外延。
變量的命名規(guī)則
首先,我們必須給變量取一個合適的名字,就好像每個人都有自己的名字一樣,否則就難以區(qū)分了?!≡赩B6中,變量的命名必須遵循以下規(guī)則:
(1)變量名必須以字母或下劃線打頭,名字中間只能由字母、數(shù)字和下劃線“_”組成;最后一個字符可以是類型說明符;
(2)變量名的長度不得超過255個字符;
(3)變量名在有效的范圍內(nèi)必須是唯一的。有效的范圍就是引用變量可以被程序識別、使用的作用范圍——例如一個過程、一個窗體等等。有關(guān)引用變量作用范圍的內(nèi)容,將在以后介紹。
(4)變量名不能是VB中的保留字(關(guān)鍵字),也不能是末尾帶類型說明符的保留字,但可以把保留字嵌入變量名, 關(guān)鍵字是指VB6語言中的屬性、事件、方法、過程、函數(shù)等系統(tǒng)內(nèi)部的標識符。如已經(jīng)定義的詞(if、endif、while、loop等)、函數(shù)名(len、format、msgbox等)。像Print、Print$是非法的,而Myprint是合法的。 例如: strName1,intMax_Length,intLesson,strNo3等是合法的變量名,而A&B,all right,3M,_Number等是非法的變量名。
注意:
(1)變量名在VB中是不區(qū)分大小寫的(如ABC、aBc、abc等都是一樣的)。C語言中區(qū)分大小寫。不同的語言有不同的規(guī)則。
(2)定義和使用變量時,通常要把變量名定義為容易使用閱讀和能夠描述所含數(shù)據(jù)用處的名稱,而不要使用一些難懂的縮寫如A或B2等。例如:假定正在為水果鋪編一個銷售蘋果的軟件。我們需要兩個變量來存儲蘋果的價格和銷量。此時,可以定義兩個名為Apple_Price和Apple_Sold的變量。每次運行程序時,用戶就這兩個變量提供具體值,這樣看起來就非常直觀。具體方法是:通過用一個或多個單詞組成有意義的變量名來使變量意義明確。例如,變量名SalesTaxRate就比Tax或Rate的意義明確得多。
(3)根據(jù)需要混合使用大小寫字母和數(shù)字。一個合理協(xié)議是,變量中每個單詞的第一個字母大寫,例如:DateOfBirth。
(4)另一個合理協(xié)議是,每個變量名以兩個或三個字符縮寫開始,這些字符縮寫對應(yīng)于變量要存儲數(shù)據(jù)的數(shù)據(jù)類型。例如,使用strName來說明Name變量保存字符串型數(shù)據(jù)。這種命名方法叫匈牙利命名法
格式 變量類型 + 變量名字
比如剛才說的strname "str" 是"string"的縮寫 "Name" 則是變量名字
注意 變量類型都是小寫 而且變量名字是開頭大寫
C# 命名方法
stringstrName
VB 命名方法
DimstrNameasString
雖然無須過多地關(guān)注字符縮寫的細節(jié),但以后還是需要看一下這方面的約定。在Visual Basic聯(lián)機幫助和許多Visual Basic高級編程的書籍中都可以找到這一約定的細節(jié)。
變量的存儲類型
我們在程序中會經(jīng)常定義一些變量來保存和處理數(shù)據(jù)。從本質(zhì)上看,變量代表了一段可操作的內(nèi)存,也可以認為變量是內(nèi)存的符號化表示。當程序中需要使用內(nèi)存時,可以定義某種類型的變量。此時編譯器根據(jù)變量的數(shù)據(jù)類型分配一定大小的內(nèi)存空間。程序就可以通過變量名來訪問對應(yīng)的內(nèi)存了。
如果說變量的數(shù)據(jù)類型決定了對應(yīng)內(nèi)存的大小,那么存儲類型則影響著對應(yīng)內(nèi)存的使用方式。所謂使用方式,具體說就是在什么時間、程序的什么地方可以使用變量,即變量的生命周期和作用域。
先了解一些基本常識。一、在程序運行時內(nèi)存中有三個區(qū)域可以保存變量:靜態(tài)存儲區(qū)、棧(stack)和堆(heap)。二、根據(jù)變量定義的位置可分為全局變量(定義在函數(shù)體外的變量)和局部變量(定義在函數(shù)體內(nèi)的變量,包括形參)。
所有的全局變量和靜態(tài)局部變量(定義時使用關(guān)鍵字static)都保存在靜態(tài)存儲區(qū),其特點是:在編譯時分配內(nèi)存空間并進行初始化。在程序運行期間,變量一直存在,直到程序結(jié)束,變量對應(yīng)的內(nèi)存空間才被釋放。
而所有的非靜態(tài)局部變量(又稱為自動變量)保存在棧(stack)中,其特點是:在變量所在的函數(shù)或模塊被執(zhí)行時動態(tài)創(chuàng)建,函數(shù)或模塊執(zhí)行完時,變量對應(yīng)的內(nèi)存空間被釋放。換句話說,函數(shù)或模塊每被執(zhí)行一次,局部變量就會重新被分配空間。如果變量定義時沒有初始化,那么變量中的值是隨機數(shù)。
所有用malloc分配的內(nèi)存(又稱為動態(tài)內(nèi)存)都在堆(heap)中,其特點是:一般通過指針來訪問動態(tài)分配的內(nèi)存。即可以通過free來手動釋放動態(tài)內(nèi)存,也可以在程序結(jié)束時由系統(tǒng)自動釋放。
以上討論的是變量的生命周期,下面來看作用域。作用域指的是變量的可見范圍,即在變量的生命周期內(nèi),程序的哪些部分可以使用該變量。
全局變量的作用域從定義點開始一直到源文件的結(jié)束。如果要在定義點之前使用全局變量的話就需要使用關(guān)鍵字extern對作用域進行擴展。全局變量缺省是可以被其他文件引用的。如果希望僅限于本文件使用的話,需要在定義時使用關(guān)鍵字static。
對于局部變量來說,無論是靜態(tài)局部變量還是自動變量,作用域都僅限于定義該變量的函數(shù)或模塊。
動態(tài)內(nèi)存只要沒有被釋放就可以在程序的任何地方使用,前提是要知道動態(tài)內(nèi)存的地址。
注:static加在全局變量前影響的是作用域,加在局部變量前影響的是生命周期。
看過“變量的存儲類型”的人還看了:
4.如何定義全局變量
5.變量用英語怎么說