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

2.2 變量

與上一節介紹的常量只能存儲不變的數據不同,變量用于存儲一個可變數據,該數據的值可在應用程序中隨時改變。在實際的應用程序中,變量的使用遠多于常量,這是因為變量的使用更為靈活,且符合人們的思維習慣。

2.2.1 聲明變量

一般來說,變量可以用來存儲程序中需要處理的數據。在使用變量前,需要使用聲明語句對變量進行聲明。C++中變量說明語句的一般形式為

[<存儲類> ] <類型名或類型定義> <變量名表>;

其中,存儲類指的是變量的存儲位置,一般來說有如下4種類型。

● auto:屬于一次性存儲,其存儲空間可被若干變量多次覆蓋使用。

● register:存放在通用寄存器中。

● extern:在所有函數和程序段中都可引用。

● static:在內存中是以固定地址存放的,在整個程序運行期間都有效。

其中,[<存儲類> ]的方括號表示可以缺省,在默認情況下,變量的存儲類值為auto。讀者可以根據不同需要聲明不同的存儲類變量,這在后續章節中還將提到。

類型名或類型定義指的是變量所屬的數據類型,一般來說,指的是前面章節介紹的基本數據類型和枚舉類型等。在任何變量說明語句中,數據類型定義不可缺省。

變量名表是指聲明變量的變量名稱,此外,在變量的聲明語句中,可以對該變量賦初值。變量名表的格式主要有如下三種:

● <變量名>

● <變量名>=<表達式>

● <變量名1>=[<表達式1>], <變量名2>=[<表達式2>], …

其中,表達式是指變量的初始化值。例如,下面程序代碼定義了幾個變量。讀者可參照注釋仔細理解變量的聲明方法,尤其是一條語句種聲明多個變量的方法。如以下代碼所示:

        int a;                        //聲明整型變量a
        char b=’A’;                 //聲明字符型變量b,并給其賦初值字符A
        float c=2.5,d,e=56.1;         //聲明浮點型變量c,d,e,其中將c賦初值2.5,e賦初值56.1

上述三條語句中,定義了5個變量,其中前兩條語句各聲明了一個變量,后一條語句聲明了三個變量,并給其中的c和e賦了初值,這在應用程序中都是常見的聲明方式。

2.2.2 變量的命名規則

C++中,變量的命名規則與其他高級語言的類似,讀者如果有過高級語言諸如C語言等的學習經歷,可以與之進行比較。

在C++中,變量是一種標識符,其命名規則必須遵循標識符的命名規則,即變量只能由大小寫英文字母、下畫線(_),以及阿拉伯數字組成,并且其第一個字符必須是大小寫英文字母或者下畫線,而不能是數字。例如,下列變量名為合法變量:student、name2、s_age、_sno等,而如下的這些變量名為非法變量:

        student$,studen]t,studen*               //$、] 和 * 都是非法字符
        2name                                      //不能以數字開頭
        s-age                                      //- 是非法字符

一般來說,操作系統和C++標準庫里的標識符以下畫線開頭,這是約定俗成的。用戶應該避免使用下畫線作為自己定義的標識符的開頭。此外,不能用關鍵字和保留標識符來給自定義的變量命名。

注意:C++語言是大小寫敏感的語言,也就是說,star、Star、sTar、stAr和STAR等都是相互不同的標識符。

事實上,變量的命名除了需要滿足以上的命名規則外,為了保證程序的可讀性,還需要對其進行一些約束。這是因為如果變量的命名毫無規律的話,那么程序員之間就不能看懂對方的代碼寫的是什么,在大型軟件系統開發中,這將極大地影響開發效率。可見,好的命名規則意味著程序代碼的易讀性和高質量。

目前在Windows程序開發和MFC程序開發中常用的命名規則是匈牙利命名法。這種命名法的出發點是把變量名按“前綴+對象描述”的順序組合起來,以使程序員命名變量時對變量的類型和其他屬性有直觀的了解,所有Microsoft的API、界面、技術文件等都采用這些規范。應用匈牙利命名法,所有的變量名都應該以“前綴+名字”的形式出現,如表2-1所示給出了匈牙利命名法使用的前綴符號。

表2-1 前綴符號表

提示:表2-1中,數據類型欄表示定義的變量為哪個類型,則在該變量前增加對應的前綴,表示該變量為某個類型。例如,下面變量就是符合匈牙利命名法的變量聲明。

        Char *szName;                              //以0為結束符的符串,存儲的是名字變量
        BOOL bCanExit;                              //布爾型變量
        DWORD dwMaxCount;                           //32位雙字變量

2.2.3 變量的作用范圍

在C++語言中,聲明的變量主要分為全局變量和局部變量,其可以出現在程序的任何位置,在不同的位置聲明,其作用域不同。

● 全局變量:其說明語句不在任何一個類定義、函數定義或復合語句(程序塊)中的變量。全局變量所占用的空間在內存的數據區,在程序運行的整個過程中位置保持不變。

● 局部變量:其說明語句在某一個類定義、函數定義或復合語句(程序塊)中的變量。局部變量所占用的空間在為程序運行時所設置的臨時工作區中,以堆棧的形式允許反復占用和釋放。

【范例2-2】變量的作用范圍。范例2-2通過聲明變量語句的位置,來確定全局變量和局部的作用域。

打開Visual C++ 6.0的集成開發環境,單擊菜單【File】/【New】,彈出【New】對話框。單擊其【File】選項卡,選擇其中的【C++ Source File】項,并在右側填寫文件名及路徑。在該示例中,文件名為“2-2”,并選擇該文件的保存路徑,如圖2-1所示。

確定輸入及選擇的保存路徑無誤后,單擊【OK】按鈕完成建立源程序。系統進入C++源程序的編輯界面后,在其中輸入如代碼清單2-2所示的代碼。

代碼清單2-2

        1   #include <iostream.h>                       //預處理文件
        2   void main()                                 //主函數
        3   {
        4        int  a=0;
        5        int  b=0;                              //定義全局變量a,b,并賦初值0
        6        a++;
        7        b++;                                   //將a加1后賦給a,將b加1后賦給b
        8        cout<<"a="<<a<<","<<"b="<<b<<endl;     //輸出a,b的值
        9        {
        10          float a=0.5;                        //定義局部變量a
        11           a++;
        12           b++;                               //變量a,b遞加
        13       cout<<"a="<<a<<","<<"b="<<b<<endl;     //輸出a,b的值
        14       }
        15       a++;
        16       b++;                                   //變量a,b遞加
        17       cout<<"a="<<a<<","<<"b="<<b<<endl;     //輸出a,b的值
        18  }

【運行結果】在Visual C++ 6.0中運行上述代碼,其運行結果如圖2-6所示。

圖2-6 變量的作用范圍

【范例解析】在范例2-2代碼段中,全局變量int型a的作用范圍為4~8行和15~17行,全局變量int型b的作用范圍為5~17行,而局部變量float型a的作用范圍為10~14行。在上述代碼中,主要使用了變量的聲明語句和輸出語句。

提示:在實際的應用程序中,如果涉及全局變量,讀者應仔細分析其中每個變量在程序中的作用范圍及判斷其值的變化。

2.2.4 變量應用示例

為了更好地說明變量在具體程序中的應用,下面也通過一個實例對其進行講解。在2.1.2節中介紹了計算圓面積的程序實現,但其半徑只能在程序中指定,不能接收用戶輸入而根據輸入計算面積。下面對上述實例進行修改,使其達到接收用戶輸入而計算面積的目的。

【范例2-3】根據用戶輸入計算圓面積。該范例根據用戶輸入圓的半徑來計算其面積,其使用到了變量,操作步驟如下。

打開Visual C++ 6.0的集成開發環境,單擊菜單【File】/【New】,彈出【New】對話框。單擊其【File】選項卡,選擇其中的【C++ Source File】項,并在右側填寫文件名及路徑。在該示例中,文件名為“2-3”,并選擇該文件的保存路徑,如圖2-1所示。

確定輸入及選擇的保存路徑無誤后,單擊【OK】按鈕完成建立源程序。系統進入C++源程序的編輯界面后,在其中輸入如代碼清單2-3所示的代碼。

代碼清單2-3

        1   #include <iostream.h>                           //預處理文件
        2   void main()
        3   {
        4        const double pi=3.141592635898;            //定義圓周率常量pi
        5        double radius;                             //定義半徑變量radius
        6        double area;                               //定義面積變量area
        7        cout<<"Please input radius"<<endl;
        8        cin>>radius;                               //輸入半徑
        9        area=pi*radius*radius;                   //計算面積
        10       cout<<"area of circle of radius " << radius << " is "<<area<<"\n";
        11       //輸出結果
        12  }

【運行結果】運行上述程序后,輸入半徑8.5,其運行結果如圖2-7所示。

圖2-7 變量應用示例

【范例解析】范例2-3代碼中,聲明了兩個變量radius和area,其中radius用于接收用戶輸入的半徑,area用于存儲計算得出的面積,最后輸出。

注意:比較2.1.2節中的范例2-1與范例2-3,讀者可以發現,其不同點就在于前者使用常量,而后者使用變量,通過接收用戶的輸入來計算圓面積,這是較為實用的。

在具體的應用中,變量的使用非常廣泛,幾乎每個代碼段中都需要使用到,在后續的實例中讀者還將看到。

主站蜘蛛池模板: 沽源县| 惠水县| 双流县| 宽城| 彩票| 达尔| 平安县| 松江区| 南漳县| 寿光市| 仙游县| 扎赉特旗| 靖安县| 周口市| 永安市| 新余市| 宁阳县| 石首市| 锡林浩特市| 南阳市| 锡林浩特市| 巩留县| 新津县| 罗山县| 五寨县| 吉林省| 汪清县| 林甸县| 图木舒克市| 常熟市| 富顺县| 合阳县| 温泉县| 长岛县| 资中县| 大关县| 怀化市| 平塘县| 博爱县| 阜南县| 深水埗区|