官术网_书友最值得收藏!

3.3 變量的聲明及初始化

在使用變量時,首先需要對變量進行命名。對變量命名的過程,其實就是聲明一個變量的過程。在使用變量之前,必須對其進行聲明并初始化。本節將對變量的聲明、簡單數據類型、變量的初始化,以及變量的作用域進行詳細講解。

3.3.1 變量的聲明

img

1.聲明變量

聲明變量就是指定變量的名稱和類型。變量的聲明非常重要,未經聲明的變量本身并不合法,也無法在程序中使用。在C# 中,聲明一個變量是由一個類型和跟在后面的一個或多個變量名組成的,多個變量之間用逗號分開,聲明變量以分號結束,語法如下。

img

例如,聲明一個整型變量mr,再同時聲明3 個字符串變量mr_1、mr_2 和mr_3,代碼如下。

img

2.變量的命名規則

在聲明變量時,要注意變量的命名規則。C# 的變量名是一種標識符,應該符合標識符的命名規則。另外,需要注意的一點是,C# 中的變量名是區分大小寫的,比如num 和Num 是兩個不同的變量,在程序中使用時是有區別的。下面列出了變量的命名規則。

●變量名只能由數字、字母和下畫線組成。

●變量名的第一個符號只能是字母或下畫線,不能是數字。

●不能使用C# 中的關鍵字作為變量名。

●一旦在一個語句塊中定義了一個變量名,那么在變量的作用域內不能再定義同名的變量。

例如,下面的變量名是正確的。

img

下面的變量名是不正確的。

img

學習筆記

在C# 中允許使用漢字或其他語言文字作為變量名,如 “int 年齡 = 21”,在程序運行時并不會出現錯誤,但建議讀者盡量不要使用這些語言文字作為變量名。

3.3.2 簡單數據類型

img

前面提到,在聲明變量時,首先需要確定變量的類型,那么,開發人員可以使用哪些變量類型呢?實際上,可以使用的變量類型是無限的,因為開發人員可以通過自定義類型存儲各種數據,但這里要講解的簡單數據類型是C# 中預定義的一些類型。

C# 中的數據類型根據其定義可以分為兩種:一種是值類型;另一種是引用類型。從概念上看,值類型是直接存儲值,而引用類型存儲的是對值的引用。C# 中的數據類型結構如圖3.2 所示。

由圖3.2 可以看出,值類型主要包括簡單類型和復合類型兩種,其中:簡單類型是程序中使用的基本類型,主要包括整數類型、浮點類型、布爾類型和字符類型4 種,這4 種簡單類型都是.NET 中預定義的;復合類型主要包括枚舉類型和結構類型,這兩種復合類型既可以是.NET 中預定義的,也可以由用戶自定義。本節主要對簡單類型進行詳細講解,簡單類型在實際中的應用如圖3.3 所示。

img

圖3.2 C# 中的數據類型結構

img

圖3.3 簡單類型在實際中的應用

1.整數類型

整數類型用來存儲整數數值,即沒有小數部分的數值。可以是正數,也可以是負數。整數類型數據在C# 程序中有3 種表現形式,分別為十進制、八進制和十六進制。

(1)十進制:十進制的表現形式比較常見,如120、0、-127。

學習筆記

不能以0 作為十進制數的開頭。

(2)八進制:以0 開頭的數,如0123(轉換成十進制數為83)、-0123(轉換成十進制數為-83)。

學習筆記

八進制數必須以0 開頭。

(3)十六進制:以0x/0X 開頭的數,如0x25(轉換成十進制數為37)、0Xb01e(轉換成十進制數為45086)。

學習筆記

十六進制數必須以0x 或0X 開頭。

C# 中內置的整數類型如表3.1 所示。

表3.1 C# 中內置的整數類型

img

學習筆記

表3.1 中出現了 “有符號**” 和 “無符號**”,其中,“無符號**” 是在 “有符號**”類型的前面加了一個u,這里的u 是“unsigned”的縮寫。它們的主要區別是:“有符號**” 既可以存儲正數,也可以存儲負數;“無符號**” 只能存儲不帶符號的整數,因此,它只能存儲正數。例如,下面的代碼:

img

例如,定義一個int 類型的變量i 和一個byte 類型的變量j,并分別賦值為2017 和255,代碼如下。

img

此時,如果將byte 類型的變量j 賦值為256,即將代碼修改如下:

img

在Visual Studio 中編譯程序則會出現如圖3.4 所示的錯誤提示信息。

img

圖3.4 取值超出指定類型的范圍時出現的錯誤提示信息

分析圖3.4 中出現的錯誤提示信息,主要是由于byte 類型的變量是8 位無符號整數,它的取值范圍為0 ~255,而 “256” 這個值已經超出了byte 類型的變量的取值范圍,所以編譯程序會出現錯誤提示信息。

學習筆記

整數類型變量的默認值為0。

2.浮點類型

浮點類型變量主要用于處理含有小數的數據。浮點類型主要包含float 和double 兩種類型,表3.2 列出了這兩種浮點類型的描述信息。

表3.2 兩種浮點類型的描述信息

img

如果不做任何設置,則包含小數點的數值都被認為是double 類型,如9.27,在沒有特別指定的情況下,這個數值是double 類型。如果要將數值以float 類型來處理,就應該通過強制使用f 或F 將其指定為float 類型。

例如,下面的代碼就是將數值強制指定為float 類型。

img

如果要將數值強制指定為double 類型,則應該使用d 或D 進行設置,但加不加 “d” 或 “D” 沒有硬性規定,可以加,也可以不加。

例如,下面的代碼就是將數值強制指定為double 類型。

img

學習筆記

當需要使用float 類型變量時,必須在數值的后面跟隨f 或F,否則編譯器會直接將其作為double 類型處理。另外,可以在double 類型的值前面加上 “(float)” 對其進行強制轉換。浮點類型變量的默認值是0,而不是0.0。

3.decimal 類型

decimal 類型表示128 位數據類型,它是一種精度更高的浮點類型,其精度可以達到28 位,取值范圍為-7.9×1028 ~7.9×1028

學習筆記

由于decimal 類型的高精度特性,它更適用于財務和貨幣計算。

如果希望一個小數被當成decimal 類型使用,則需要使用后綴m 或M,如下所示。

img

如果小數沒有后綴m 或M,則數值將被視為double 類型,從而導致編譯器錯誤。例如,在開發環境中運行下面的代碼,將會出現如圖3.5 所示的錯誤提示信息。

img
img

圖3.5 不加后綴m 或M 時編譯器出現的錯誤提示信息

由圖3.5 可以看出,“3.14” 這個數值如果沒有后綴,就會直接被當成double 類型,所以在賦值為decimal 類型的變量時就會出現錯誤提示信息。

示例1.根據身高和體重計算BMI 指數

創建一個控制臺應用程序,聲明double 類型變量height 來記錄身高,單位為米;聲明int 類型變量weight 來記錄體重,單位為千克。根據 “BMI = 體重÷( 身高× 身高)” 計算BMI 指數(身體質量指數),代碼如下。

img

學習筆記

第10、14、18 和22 行代碼使用了if…else if 條件判斷語句,該語句主要用來判斷是否滿足某種條件,我們將在第4章對其進行詳細講解,這里只需要了解即可。

根據身高和體重計算BMI 指數代碼的運行結果如圖3.6 所示。

img

圖3.6 根據身高和體重計算BMI 指數代碼的運行結果

4.布爾類型

布爾類型主要用來表示true 值或false 值,在C# 中定義布爾類型時,需要使用布爾關鍵字。例如,下面代碼定義一個布爾類型變量。

img

學習筆記

布爾類型通常被用在流程控制語句中作為判斷條件。

這里需要注意的是,布爾類型變量的值只能是true 或false,不能將其他的值指定給布爾類型變量。例如,將一個整數10 賦值給布爾類型變量,代碼如下。

img

在Visual Studio 中運行這行代碼,會出現如圖3.7 所示的錯誤提示信息。

img

圖3.7 將整數賦值給布爾類型變量時出現的錯誤提示信息

學習筆記

布爾類型變量的默認值為false。

5.字符類型

字符類型在C# 中使用Char 類來表示,該類主要用來存儲單個字符,它占用16 位(2字節)的內存空間。在定義字符類型變量時,要以單引號(' ')表示,如'a' 表示一個字符,而"a" 則表示一個字符串。雖然其只有一個字符,但由于使用雙引號,所以它仍然表示字符串,而不是字符。字符類型變量的聲明非常簡單,代碼如下。

img

學習筆記

Char 類只能定義一個Unicode 字符。Unicode 字符是目前計算機中通用的字符編碼,它為針對不同語言中的每個字符設定了統一的二進制編碼,用于滿足跨語言、跨平臺的文本轉換和處理要求,這里了解Unicode 即可。

1)Char 類的使用

Char 類為開發人員提供了許多方法,可以通過使用這些方法靈活地對字符進行各種操作。Char 類的常用方法及說明如表3.3 所示。

表3.3 Char 類的常用方法及說明

img

從表3.3 中可以看到,C# 中的Char 類提供了很多操作字符的方法,其中,以“Is”和“To” 開始的方法比較常用。以 “Is” 開始的方法大多是判斷Unicode 字符是否為某個類別,如是否為大/ 小寫、是否是數字等;而以 “To” 開始的方法主要用來對字符進行大小寫轉換及字符串轉換的操作。

示例2.Char 類的常用方法的應用

創建一個控制臺應用程序,演示如何使用Char 類提供的常用方法,代碼如下。

img
img

學習筆記

第3 ~8 行代碼聲明了5 個不同類型的字符變量,下面的操作都是圍繞這5 個字符變量進行的。

第25 行代碼主要是為了使控制臺界面能夠停留在桌面上。

運行上面代碼,得到如圖3.8 所示的內容。

img

圖3.8 Char 類的常用方法的應用

2)轉義字符

前面講到了字符類型只能存儲單個字符,但是,如果在Visual Studio 中編寫如下代碼,則會出現如圖3.9 所示的錯誤提示信息。

img

從代碼表面上看,反斜線“\”是一個字符,在正常情況下,它應該是可以定義為字符的,但為什么會出現錯誤呢?這里就需要了解轉義字符的概念。

img

圖3.9 定義反斜線時出現的錯誤提示信息

轉義字符是一種特殊的字符變量,以反斜線“\”開頭,后跟一個或多個字符。也就是說,在C# 中,反斜線 “\” 是一個轉義字符,不能單獨作為字符使用。因此,如果要在C# 中使用反斜線,則可以使用下面的代碼表示。

img

轉義字符相當于一個電源變換器。電源變換器通過一定的手段獲得所需要的電源形式,如交流變成直流、高電壓變為低電壓、低頻變為高頻等。轉義字符的功能與其類似,它可以將字符轉換成另一種操作形式,或者將無法一起使用的字符進行組合。

學習筆記

轉義字符 “\” 只針對后面緊跟著的單個字符進行操作。

C# 中的常用轉義字符及其作用如表3.4 所示。

表3.4 C# 中的常用轉義字符及其作用

img

示例3.輸出Windows 的系統目錄

創建一個控制臺應用程序,通過使用轉義字符在控制臺窗口中輸出Windows 的系統目錄,代碼如下。

img
img

輸出Windows 的系統目錄代碼的運行結果如圖3.10 所示。

img

圖3.10 輸出Windows 的系統目錄代碼的運行結果

學習筆記

在輸出系統目錄時,如果遇到反斜杠,則使用 “\\” 表示。但是,如果有多級目錄,在遇到反斜杠時,如果都使用 “\\”,則會顯得非常麻煩。如果遇到下面這種情況:

img

3.3.3 變量的初始化

img

變量的初始化實際上就是給變量賦值,以便在程序中使用。在Visual Studio 2017 中運行下面一段代碼。

img

在運行上面這段代碼時,會出現如圖3.11 所示的錯誤提示信息。

img

圖3.11 變量未賦值時出現的錯誤提示信息

從圖3.11 中可以看出,如果在使用變量時直接定義一個變量,則會提示使用了未賦值的變量,這說明在程序中使用變量時一定要對其進行賦值,也就是初始化,然后才可以使用。那么如何對變量進行初始化呢?

初始化變量有3 種方法,分別是單獨初始化變量、聲明時初始化變量、同時初始化多個變量,下面分別進行講解。

1.單獨初始化變量

在C# 中,使用賦值運算符 “=”(等號)對變量進行初始化,即將等號右邊的值賦給左邊的變量。

例如,聲明一個變量sum 并初始化,其默認值為2017,代碼如下。

img

學習筆記

在對變量進行初始化時,等號右邊也可以是一個已經被賦值的變量。例如,首先聲明兩個變量sum 和num,然后將變量sum 賦值為2017,最后將變量sum 賦值給變量num,代碼如下。

img

2.在聲明時初始化變量

在聲明變量時可以對變量進行初始化,即在每個變量名后面加上給變量賦初始值的指令。

例如,先聲明一個整型變量mr 并賦值為927,然后同時聲明3 個字符串類型的變量并初始化,代碼如下。

img

3.同時初始化多個變量

在對多個同類型的變量賦同一個值時,為了節省代碼的行數,可以同時對多個變量進行初始化。

例如,聲明5 個int 類型的變量a、b、c、d、e,然后將這5 個變量都初始化為0,代碼如下。

img
img

上面講解了初始化變量的3 種方法,我們可以利用這些方法對本節開始的代碼段進行修改,使其能夠正常運行。修改后的代碼如下。

img

再次運行代碼,即可正常運行。

3.3.4 變量的作用域

img

由于變量被定義后只是暫時存儲在內存中,等程序執行到某個點后該變量會被釋放,也就是說變量有生命周期,因此,變量的作用域是指程序代碼能夠訪問該變量的區域。如果超出該區域,則在編譯時會出現錯誤。在程序中,一般會根據變量的有效范圍將變量分為成員變量和局部變量。

1.成員變量

在類體中定義的變量稱為成員變量,成員變量在整個類中都有效。類的成員變量又可以分為兩種,即靜態變量和實例變量。

例如,在Test 類中聲明靜態變量和實例變量,代碼如下。

img

在該段代碼中,x 為實例變量,y 為靜態變量(也稱為類變量)。如果在成員變量的類型前面加上關鍵字static,則這樣的成員變量稱為靜態變量。靜態變量的有效范圍可以跨類,甚至可覆蓋整個應用程序。對于靜態變量,除了能在定義它的類內存、取,還能直接以 “類名.靜態變量” 的方式在其他類內使用。

2.局部變量

在類的方法體中定義的變量(定義方法的 “{” 與 “}” 之間的區域)稱為局部變量,局部變量只在當前代碼塊中有效。

在類的方法中聲明的變量(包括方法的參數)都屬于局部變量。局部變量只在當前定義的方法內有效,而不能用在類的其他方法中。局部變量的生命周期取決于方法:當方法被調用時,C# 編譯器為方法中的局部變量分配內存空間;當該方法的調用結束后,則會釋放方法中局部變量占用的內存空間,局部變量也會被銷毀。

變量的有效范圍如圖3.12 所示。

img

圖3.12 變量的有效范圍

示例4.使用變量記錄用戶的登錄名

創建一個控制臺應用程序,使用一個局部變量記錄用戶的登錄名,代碼如下。

img

使用變量記錄用戶的登錄名代碼的運行結果如圖3.13 所示。

img

圖3.13 使用變量記錄用戶的登錄名代碼的運行結果

主站蜘蛛池模板: 大名县| 三都| 阿图什市| 鲜城| 兴安县| 九龙县| 宁晋县| 济宁市| 玉门市| 集贤县| 石门县| 玉田县| 白山市| 福安市| 古田县| 河南省| 常熟市| 贵溪市| 上思县| 北碚区| 西宁市| 长丰县| 昌邑市| 永丰县| 定南县| 昌黎县| 安化县| 林口县| 锦州市| 镇巴县| 璧山县| 札达县| 嵊泗县| 平安县| 磐安县| 黑水县| 阿荣旗| 师宗县| 射阳县| 汝城县| 屯昌县|