# Array

\#Array

**declare**

data\_type data\_name\[size]

**array length 必須自行計算**

陣列在宣告之後 裡面不會有值

**宣告同時初始化**

int scores\[10] = {0}; // all init to zero

double numbers\[10] = {0.0}; // all double to zero.zero

char symbols\[10] = {'\0'}; // all char init to empty char(\0)

C99

variable length array type (Please check your compiler compatibility)

`int len = 0`

`scanf("%d",&len);`

`int arr[len];`

C 中陣列的索引值由 0 開始並不是沒有原因的，事實上陣列名稱就指向陣列記憶體的第一個位置的位址，而索引值表示所指定的陣列元素，相對於陣列第一個記憶體位置的位移量（Offset）。

位移的量與資料型態長度有關，如果是 int 整數，則每次位移時是一個 int 整數的長度，例如在上例中 arr\[0] 索引值為 0，所以表示位移量為 0，自然就是指第一個元素，而 arr\[9] 就是指相對於第一個元素的位移量為 9，C 就是根據陣列第一個元素的記憶體位置與 位移量來得到所指定要存取的陣列元素。

**如果在宣告陣列時只希望初始幾個元素，則可以這麼宣告：**

int scores\[5] = {98, 76}; // {98,76,0,0,0,0}

double numbers\[5] = {0.0, 0.1}; {0.0,0.0,0,0,0,0}

char symbols\[5] = {'A', 'B'}; {'A','B',\0,\0,\0,\0}

**如果沒有指定 array 大小 :**

int scores\[] = {1, 2, 3}; // len = 3

double numbers\[] = {0.4, 3.2, 1.0, 4.2}; // len = 4

char symbols\[] = {'A', 'B'}; // len = 2

**比較 array 內容 :**

一定要以

array1\[i]

array2\[j]

為單位

不可直接用 **array 變數名稱**作比較, 因為它代表的是記憶體位址

同理

`char name[80];`

`name = "Justin";`

此行為不合法
