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

2.2 構造數據類型

C++的構造類型主要有數組、枚舉、結構體、聯合體和類,關于類將在后面章節中詳細介紹,本節簡單介紹其他幾種構造類型。

2.2.1 數組

有時需要在程序中表示許多類型相同的數據,如記錄一個班級每名學生某門課程的成績,假設這個班級有60名學生,在程序中定義60個不相關的實型變量是非常煩瑣的,這時可以用數組來表示這60名學生某門課程的成績。數組變量可以存放一組具有相同類型的數據,其語法格式如下:

     數據類型 數組名[數組元素個數];

其中,數據類型既可以是簡單數據類型,又可以是構造數據類型。上面提到60名學生某門課程的成績可以表示為:

     float score[60];

訪問數組中的元素可以通過數組名加下標的方式,下標范圍從0到數組元素個數減1,如用score[0]訪問數組中第一個元素,即第一名學生的成績;score[59]訪問數組中最后一個元素,即第60名學生的成績。下面的語句可以輸出第10名學生的成績。

     cout <<score[9]<<endl;

字符數組是一種常用的數組,它是指數組中的每個元素都是字符,這樣就可以用字符數組描述字符串變量,具體示例如下:

     char str[9]="qianfeng";

上述語句中,str數組有9個存儲空間,除了存儲字符串中的8個字符外,還在最后一個存儲單元中存儲字符串結束標志'\0'。上述語句定義完字符數組后,用str[3]表示字符'n',用str表示整個字符串,下面的語句就可以直接輸出str整個字符串,具體示例如下:

     cout <<str <<endl;

當觀眾去電影院看電影時,通常電影票上寫著幾排幾座,此時觀眾首先會根據排號找到座位所在的行,然后根據座號找到座位所在的列,類似這樣的數據都可以用二維數組來描述,其語法格式如下:

     數組類型 數組名[行數(常量表達式)][列數(常量表達式)];

假如需要記錄60名學生3門課程的成績,可以通過如下方式定義:

     float score[60][3];

其中,行號范圍為0~59,表示60名學生;列號范圍為0~2,表示3門課程,這個數組總有180個元素,即對應180個成績。數組元素在內存中是按順序存放的,如score數組的存放方式如圖2.7所示。

圖2.7 score數組的存放方式

類似地,還可以定義多維數組,它的定義與二維數組類似,但由于多維數組不易于想象、難以調試且較占用內存,在實際開發中很少用到,因此不再贅述。

2.2.2 枚舉

在生活中,表示男女性別時,有兩種取值:Male、Female。程序中可以用整數來表示這種數據,具體示例如下:

     int Gender;//Gender取值為0或1,0表示Male,1表示Female

這種表示有兩個缺點:一是不直觀,二是容易出錯。如果Gender賦值為3,在編譯時不會報錯,但這顯然有問題,此時Gender不再表示男女性別。在C++中,可以用枚舉這個數據類型來解決這個問題。枚舉的使用很像一個整數類型,其語法格式如下:

     enum枚舉類型名{常量1,常量2,…,常量n};

它表示定義一種枚舉的數據類型,具有這種數據類型的變量所有可以取的值都列在后面的括號中。定義描述性別的枚舉類型,具體示例如下:

     enum Gender{M ale,Female};

接下來,可以通過枚舉類型Gender定義變量,具體示例如下:

     Gender gender;

這時,變量gender的取值就有兩種,即Male、Female。如果希望變量gender表示Male,只需把Male賦值給gender,具體示例如下:

     gender=Male;

枚舉類型中的每個元素的值實際上都是整數,枚舉類型本質上就是一個整數的集合,默認情況下,第一個枚舉元素被賦值為0,接下來的枚舉元素取值依次是前一個枚舉元素的取值加1。根據實際情況,程序中也可以顯式地指定某個枚舉元素的值,具體示例如下:

     enumW eek{Sun,Mon,Tue=3,Wed,Thu=3,Fri,Sat};

上述語句中,Sun值為0,Mon值為1,Tue值為3,Wed值為4,Thu值為3,Fri值為4,Sat值為5。從此示例中可以得出,同一枚舉類型的不同常量取值不是唯一的。

在C++中,另一種使用枚舉類型的方法是定義一個匿名enum枚舉類型,即enum后不給出具體的類型名,將其中的枚舉常量作為一般常量使用,具體示例如下:

上述語句中,枚舉常量Min和Max可以作為一般的符號常量使用,事實上,匿名枚舉的主要用途就是定義符號常量。

2.2.3 結構體

假設要存儲有關學生的信息,則可能要存儲學生的姓名、學號、年齡、成績等。這時就希望有一種數據類型可以將這些信息存儲在一個單元中,顯然數組不能符合要求,但C++中的結構體可以符合要求。結構體是一種比數組更靈活的數據類型,因為同一個結構可以存儲多種類型的數據,這樣就可以將有關學生的信息放在一個結構體中,從而將數據的表示合并到一起。如果要表示整個班級學生,則可以使用結構體數組。結構體也是類的基石,學習結構體將使大家離面向對象程序設計的核心更近一步,其語法格式如下:

其中,struct是關鍵字,不可以省略;結構體名要符合標識符的命名規則,可以省略;成員類型除了可以是基本數據類型外,還可以是構造數據類型。具體示例如下:

定義了結構體類型后,在表示具體的一個學生時,就可以定義這個結構體類型的變量,具體示例如下:

     Student stu;

當存儲學生信息時,就可以為結構體中的各個成員分別賦值,具體示例如下:

     strcpy(stu.name,"小千");
     stu.id=2018010101;
     stu.age=18;
     stu.score=98.0f;

為使某個結構體變量有初始值,可以在定義這個變量時直接為它初始化,具體示例如下:

     Student stu1={"小鋒",2018010102,18,99.0f};

2.2.4 聯合體

聯合體是一種數據格式,它能夠存儲不同的數據類型,但只能同時存儲其中的一種類型。簡單理解,結構體可以同時存儲int、long和double,但聯合體只能存儲int、long和double中的一種類型,因此聯合體常用于節省內存。定義和使用聯合體的方法和結構體十分類似,也需要首先定義聯合體內部的成員類型,其語法格式如下:

假設管理一個商品目錄,其中有一些商品的編號為整數,而另一些商品的編號為字符串,這時就可以用聯合體來表示,具體示例如下:

定義了聯合類型后,在表示具體的一個商品編號時,就可以定義這個聯合體類型的變量,具體示例如下:

上述代碼中,當id.id_num賦值為65時,輸出id.id_name為A。

主站蜘蛛池模板: 巧家县| 博客| 冕宁县| 太和县| 勐海县| 电白县| 临漳县| 南丹县| 大化| 额济纳旗| 抚州市| 永靖县| 南开区| 嵊泗县| 高要市| 驻马店市| 桦川县| 江津市| 剑川县| 砚山县| 炉霍县| 吉隆县| 甘谷县| 永靖县| 溆浦县| 栖霞市| 南昌县| 南靖县| 南通市| 延长县| 东平县| 芜湖县| 沁水县| 兴仁县| 临江市| 台东县| 枣阳市| 柏乡县| 兰溪市| 西和县| 天台县|