變數介紹
由於變數讓你能夠把程式中準備使用的每一段數據都賦給一個簡短、易於記憶的名字,因此它們十分有用。變數可以保存程式運行時用戶輸入的數據(如使用
InputBox函式在
螢幕上顯示一個
對話框,然後把用戶鍵入的文本保存到變數中)、特定運算的結果以及要在
窗體上顯示的一段數據等。
簡而言之,變數是用於跟蹤幾乎所有類型信息的簡單工具。變數聲明後沒有賦值的話,編譯器會自動提示並賦予默認值。變數是一種使用方便的占位符,用於引用計算機記憶體地址,該地址可以存儲Script運行時可更改的程式信息。例如,可以創建一個名為Click Count的變數來存儲用戶單擊
Web頁面上某個對象的
次數。
使用變數並不需要了解變數在計算機記憶體中的地址,只要通過變數名引用變數就可以查看或更改變數的值。
命名規則
首先,我們必須給變數取一個合適的名字,就好像每個人都有自己的名字一樣,否則就難以區分了。
匈牙利命名法Hungarian
廣泛套用於象Microsoft Windows這樣的環境中。
Windows 編程中用到的變數(還包括宏)的命名規則匈牙利命名法,這種命名技術是由一位能幹的Microsoft 程式設計師查爾斯·西蒙尼(Charles Simonyi) 提出的。
匈牙利命名法通過在變數名前面加上相應的小寫字母的符號標識作為前綴,標識出變數的作用域,類型等。這些符號可以多個同時使用,順序是先m_(成員變數),再指針,再簡單數據類型,再其他。例如:m_lpszStr, 表示指向一個以0字元結尾的字元串的長指針成員變數。
匈牙利命名法關鍵是:標識符的名字以一個或者多個小寫字母開頭作為前綴;前綴之後的是首字母大寫的一個單詞或多個單詞組合,該單詞要指明變數的用途。
匈牙利命名法中常用的小寫字母的前綴:
前綴類型
駱駝命名法camelCase
駱駝式命令法,正如它的名稱所表示的那樣,是指混合使用大小寫字母來構成變數和函式的名字。例如,下面是分別用駱駝式命名法和下劃線法命名的同一個函式:
printEmployeePaychecks();
print_employee_paychecks();
第一個函式名使用了駱駝式命名法——函式名中的每一個邏輯斷點都有一個大寫字母來標記;第二個函式名使用了下劃線法----函式名中的每一個邏輯斷點都有一個下劃線來標記。
駱駝式命名法近年來越來越流行了,在許多新的函式館和MicrosoftWindows這樣的環境中,它使用得當相多。另一方面,下劃線法是c出現後開始流行起來的,在許多舊的程式和UNIX這樣的環境中,它的使用非常普遍。
帕斯卡命名法PascalCase
與駱駝命名法類似。只不過駱駝命名法是首字母小寫,而帕斯卡命名法是首字母大寫
public void
DisplayInfo();
string UserName;
二者都是採用了帕斯卡命名法.
在C#中,以帕斯卡命名法和駱駝命名法居多。
在C#中,簡單的變數一般用camelCase規則,而比較高級的命名使用PascalCase。 如.net Framework的公共欄位及公共屬性。
MyData是一個帕斯卡命名的示例。 myData是一個駱駝命名法。
iMyData是一個匈牙利命名法,小寫說明了變數的類型或者用途。
作用域
變數的作用域是指變數在程式中起的作用的範圍。有的變數在整個程式中起作用,有的變數是在一個檔案中起作用,有的變數是在一個函式中起作用,而有的變數只是在一個小程式段中起作用。從作用域的角度,變數可以分為局部變數和全局變數。
局部變數
在函式內部定義的變數稱為局部變數,也稱為內部變數。局部變數只在定義它的函式內有效,即只有定義他們的函式才能使用,不能被其他函式使用;
形式參數也是局部變數,只在它所在的函式中有效,其他的函式不能使用。
全局變數
在函式外定義的變數稱為全局變數,又稱為外部變數。全局變數的作用域是從定義點開始直到檔案尾,可以被作用域內的所有函式共用;
在同一個源檔案中,如果全局變數和局部變數同名,則在局部變數的作用域內,全局變數不起作用。
聲明變數
變數在使用前,必須在代碼中進行聲明,即創建該變數。在使用變數之前,大多數語言通常首先需要聲明變數。就是說,必須事先告訴
編譯器在程式中使用了哪些變數,及這些變數的數據類型以及變數的長度。這是因為在
編譯程式執行代碼之前編譯器需要知道如何給語句變數開闢存儲區,這樣可以最佳化程式的執行。聲明變數有兩種方式分別是隱式聲明、顯式聲明。在此以VB為例進行對兩種方式進一步說明。
不同語言有不同的變數聲明方式,例如聲明變數的一種方式是使用Dim
語句、Public語句和Private語句在
Script中顯式聲明變數。另一種方式是通過直接在Script中使用變數名這一簡單方式隱式聲明變數。這通常不是一個好習慣,因為這樣有時會由於變數名被拼錯而導致在運行
Script時出現意外的結果。因此,最好使用
Option Explicit語句顯式聲明所有變數,並將其作為
Script的第一條語句。
變數類型
變數有兩種類型:屬性變數和用戶自己建立的變數。
不同語言的變數劃分有所差異,在此以C語言為例做簡單說明。
C語言中,變數分為全局變數和局部變數;也可以這樣分:自動變數,靜態變數。前者是按變數作用範圍來分的,而後者是按變數存儲方式來分的。如果按存儲占用空間來分,可以是整型變數、字元型變數、
浮點型變數等。當然還有數組、
結構體變數等。C語言還有一個重要變數:指針變數,它存放的值是一個記憶體地址。
存儲類型
從本質上看,變數代表了一段可操作的
記憶體,也可以認為變數是記憶體的符號化表示。當程式中需要使用記憶體時,可以定義某種類型的變數。此時編譯器根據變數的數據類型分配一定大小的記憶體空間。程式就可以通過變數名來訪問對應的記憶體了。
如果說變數的數據類型決定了對應記憶體的大小,那么存儲類型則影響著對應記憶體的使用方式。
先了解一些基本常識。
一、在程式運行時記憶體中有三個區域可以保存變數:靜態存儲區、棧(stack)和堆(heap)。
二、根據變數定義的位置可分為全局變數(定義在函式體外的變數)和局部變數(定義在函式體內的變數,包括形參)。
所有的全局變數和靜態局部變數(定義時使用關鍵字static)都保存在靜態存儲區,其特點是:在編譯時分配記憶體空間並進行初始化。在程式運行期間,變數一直存在,直到程式結束,變數對應的記憶體空間才被釋放。
而所有的非靜態局部變數(又稱為自動變數)保存在棧(stack)中,其特點是:在變數所在的函式或模組被執行時動態創建,函式或模組執行完時,變數對應的記憶體空間被釋放。換句話說,函式或模組每被執行一次,局部變數就會重新被分配空間。如果變數定義時沒有初始化,那么變數中的值是隨機數。
所有用malloc分配的記憶體(又稱為動態記憶體)都在堆(heap)中,其特點是:一般通過指針來訪問動態分配的記憶體。即可以通過free來手動釋放動態記憶體,也可以在程式結束時由系統自動釋放。