C++ 快速導覽 - 複合資料型態




C++ 定義了數種複合資料型態 (compound type)

  • 參考 (reference)
  • 列舉 (enumeration)
    • 匿名列舉 (anonymous enumeration)
  • 陣列 (array)
    • 字元陣列 (character array)
  • 指標 (pointer)
  • 結構 (structure)
  • 聯合 (union)


參考



參考是變數 (variable) 的別名 (alias) ,定義參考使用 & 運算子 (operator) ,例如
int a = 22;
int &aRef = a;


這樣 aRef 就會是 a 別名。


列舉



列舉是一組整數常數,定義列舉使用關鍵字 (keyword) enum ,例如
enum Day {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};


匿名列舉則是不帶型態識別字 (identifier) 的列舉,例如
enum {Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday};


兩者的主要差別列舉可用識別字另外定義屬於該列舉型態的變數,匿名列舉則不行,例如
Day today = Wednesday;


陣列



陣列是相同資料型態 (data type) 的一組連續數值,裡頭每個數值被稱為元素 (element) ,可依索引值設定或存取指定元素。使用陣列前須宣告型態並且指定陣列大小,例如下面 a 會是個有 5 個元素的整數陣列
int a[5];


亦可直接用大括弧初始化陣列元素,這樣就不需要指定陣列大小,例如
int a[] = {1, 2, 3, 4, 5};


陣列名稱存放的是陣列起始的記憶體位址,至於字元陣列比較特別,可用雙引號直接設定初值,亦可直接用字元陣列名稱存取整個陣列字元陣列,例如
char a[] = "12345"; // "12345" 等於 {'1', '2', '3', '4', '5'}
std::cout << "a:" << a << std::endl; // 印出 a: 12345


指標



指標是儲存記憶體位址的資料型態,使用指標需要宣告所屬的資料型態及運用 * 運算子,另外用 & 取得位址。例如
int a = 22;
int *aPtr = &a;


這樣 aPtr 就會儲存 a 的記憶體位址。如果要用指標變數存取所指向變數的數值,可利用反參考運算子 * ,例如
int b = *aPtr; // b 會得到 a 的值


結構



結構可存放不同資料型態的數值,使用關鍵字 struct 來定義,例如
struct Demo {
    int member1;
    float member2;
    char *member3;
};


設定或存取結構中的成員 (member) 則利用小數點 .
Demo d;
d.member1 = 1;
d.member2 = 2.0;
d.member3 = "3";


C++ 的結構其實是預設為 public 的類別 (class) 。


聯合



聯合同樣可存放不同資料型態的數值,使用關鍵字 struct 來定義,例如
union Demo {
    int member1;
    float member2;
    char *member3;
};


但是聯合裡頭只能有一個成員被給值,當某一個成員被給值後,其他成員都會轉變為未定義
Demo d;
d.member1 = 1;   
d.member2 = 2.0; // d.member1 會變成未定義
d.member3 = "3"; // d.member2 會變成未定義


C++ 的聯合其實是節省記憶體空間的類別。


中英文術語對照
複合資料型態compound type
參考reference
列舉enumeration
匿名列舉anonymous enumeration
陣列array
字元陣列character array
指標pointer
結構structure
聯合union
變數variable
別名alias
運算子operator
關鍵字keyword
識別字identifier
資料型態data type
元素element
成員member
類別class


您可以繼續參考
複合資料型態


相關目錄
回 C++ 快速導覽
回 C++ 教材
回首頁


參考資料
C++ reference
cplusplus.com
Cprogramming.com C++ Tutorial

C++ Primer, Fourth Edition, Stanley B. Lippman...

沒有留言: