[C++, CPP 教學 教程 教材 Tutorial] 進階資料型態(Advance Data Type) - 基本陣列(Basic Array)
YehYeh\'s Notepad yehyeh@gmail.com 

[C++, CPP] 進階資料型態

基本陣列(Basic Array)

  • 陣列(Array):儲存多筆同型別的資料,每筆資料稱為元素(Element)
    • 陣列所需的記憶體大小:依陣列型別大小而定
    • 陣列的元素儲存於連續的記憶體中
    • 陣列是多個元素聚合(Aggreate)而成
    • 宣告一個可以存放5個元素的陣列
      int data[5];
      
  • 陣列宣告
    • 基本宣告:
      • 型態 名稱[大小];
    • 宣告並以固定值初始化陣列:
      • 型態 名稱[大小] = { 值1 };
    • 宣告並以0初始化陣列:
      • 型態 名稱[大小] = { };
      • 型態 名稱[大小] = { 0 };
    • 宣告並給每個元素各別的初始值
      • 型態 名稱[大小] = { 值1, 值2, ...,值n};
      • 型態 名稱[ ] = { 值1, 值2, ...,值n};
    • 宣告陣列大小時,只能使用數字字面、const變數、列舉子(Enumerator)
      • 陣列大小可以是任何整數常數運算式
      • int myArray[5];
        
        const int maxArraySize = 5;
        int myArray[maxArraySize];
        
  • 使用:
    • 名稱[索引];
    • 陣列名稱對應到一個記憶體位址
      陣列宣告 陣列
    • 利用索引(index)來參照(reference)要存取那個元素
    • 陣列的大小由1開始記數陣列的索引由0開始記數
    • C++不會檢查索引值,若不小心使用超出陣列範圍的索引,會引發無法預料的結果
    • 偏移量:元素間的距離
  • 陣列初始化原則
    • 用來初始化的值叫做聚合初始值列(Aggreate Initalizer List)或初始值列(initalizer list)
    • 沒有初始值列時,陣列元素的值為垃圾值
    • 初始化時不可給超過陣列大小的初始值
    • 若有給定完整的初始值列,則可以省略宣告陣列大小,C++會自動設為初始值列的長度
    • 若省略宣告陣列大小,則初始值列至少要包含一個初始值
    • 初始化時可給小於陣列大小的初始值,這些值會由第一個元素開始指派,沒指派到初始值的元素會用0來初始化
  • 陣列與sizeof
    • 取得整個陣列佔用byte數:
      • sizeof 陣列名稱
    • 取得一個陣列元素佔用的byte數:
      • sizeof 陣列名稱[0]
    • 取得一個陣列大小:
      • 陣列名稱 / sizeof 陣列名稱[0]