陣列(array)

陣列:
1、陣列資料型態可以是int、float、char等等,以下是宣告的範例。

int iarr[10];     // 宣告10個元素的整數陣列
char carr[10];    // 宣告10個元素的字元陣列

2、下面是靜態陣列的宣告方式,靜態陣列長度必須事先決定,不可以使用變數來事後決定陣列的長度。

int arr1[10];   //正確
const int size = 10;
int arr2[size];   //正確
int size2 = 10;
int arr3[size2];  //錯誤

3、可以使用 sizeof()運算子來得知陣列的長度

int iarr[] = {1, 2, 3, 4, 5, 6};
int length = sizeof(iarr) / sizeof(iarr[0]);  //length=6

4、定義於函式主體外的內建型array元素會被初始化為0,定義於函式主體內的內建型array元素不會被初始化。
5、不可以將陣列直接指定給另一個陣列,或是直接比較兩個陣列是否相同。

int arr1[5];
int arr2[5];
...
arr1 = arr2;    // 錯誤
if(arr1 == arr2){  // 錯誤
    ...
}

6、如果要將陣列指定給另一個陣列,只能循序一個一個元素進行複製,同樣的,如果想比較兩個陣列元素內容是否相同,也要用一個個元素進行比對。

int arr1[5];
int arr2[5];
for(int i=0; i<5; i++) {
    arr1[i] = arr2[i];
}

動態配置array:
1、以下兩種情況下,必須時使用動態的方式來配置記憶體:
a:必須到執行期,才能知道要分配多少空間給變數。
b:需要很多記憶體(可能是大量要計算的資料),由於靜態陣列的空間在stack上,因此無法分配過於大量的記憶體。
2、動態陣列使用new運算子,選擇型態以及所需要的空間,並傳回該空間的位址,程式結束前必須使用delete將空間釋放,否則會有記憶體洩漏的問題。

int *ptr = new int;
int *ptr2 = new int[1000];
delete ptr
delete [] ptr2

3、如果陣列內的元素為class物件時,會用default建構式來初始化每個元素,如果是內建型別則元素不會初始化。

string *psa = new string[10]; //這array有10個空字串
int *pia = new int[10];       //這10個int未初始化(不會等於0)

4、可在array尺寸後加一對空小括號來初始化,但不像靜態配置可以初始化為不同值。

int *pia2 = new int[10](1024); //這10個int初始化為1024

二維陣列:
1、二維陣列使用陣列名稱與兩個索引值來指定存取陣列元素,其宣告方式與一維陣列類似,下面配置5*10=50個整數的記憶體空間給陣列來使用:

int iarr[5][10];

2、二維陣列使用兩個索引值來指定存取陣列,這兩個索引值都是由0開始,下面簡單的示範二維陣列的賦值和存取:

#include <cstdio>
#include <cstdlib>

#define ROW 3
#define COLUMN 5

int main(void) {
    int iarr[ROW][COLUMN]; 
    int count = 0;

    for(int i=0; i

3、也可以在宣告二維陣列的同時指定二維陣列的值,以下宣告了一個2列3行的陣列:

int iarr[2][3] = {{1, 2, 3}, {4, 5, 6}};