C 語言特性 :陣列

何為陣列

Objc 透過陣列的資料結構,讓我們能夠定義 具有排序的資料項目
  • 本篇重點:定義陣列,並加以運用。
定義一變數,以表示陣列的集合。這一變數不僅是代表一個變數,透過索引 ( index )、下標 ( subscript ) 引用陣列中的每一個元素。若要存取 x 陣列索引為 i 的元素,如下:
x [ i ]
運算式
grades [ 3 ]
可以將陣列中的個別原素指定為變數
g = grades [ i ];

 陣列範例 
grades [ 0 ] grades [ 1 ] grades [ 2 ] grades [ 3 ]
第一個元素 第二個元素 第三個元素 第個元素
第一個元素為 grades [ 0 ] 

與其他變數一樣使用前,必須先先宣告。宣告陣列中的元素資料形態,像是 int、float 或是物件,最後再補上陣列元素的個數。
fraction * fract [100];      // 物件
 ( subscript )
index
索引 ( index )


陣列的初始化

定義變數時,可以直接指定數值。相同的,陣列也可以直接指定初始值。
int  integers [ 5 ]  = { 0, 1, 2 , 3, 4 };

將初始值寫入在『 { } 』之間,並且每一個元素以『 , 』隔開。

同樣的,字元陣列的初始值也是以相同的方式呈現

int  letters [ 5 ] = {  'a',  'b',  'c',  'd',  'e' };
將 'a'、 'b'、 'c'、 'd'、 'e' 指定給 letters 陣列中的前五項元素。

但我們並不需要初始化全部的元素值,若只初始化一個元素值,則其他元素將被初始化為 0,方法如下。

float data [ 5 ] = {  20.0, 34.0, 40.5 };
前三個元素分別為:20.0、 34.0、 40.5 ,剩餘的元素都會被預設為 0 。
另外也可以特別指定數值給其中幾項,寫法如下。
int x = 31; 
int a [ ] = {   [ 2 ] = x +1,  [ 5 ] = 12,  [ 32 ] = 1};
a [ ] 被定義內含有 33 項的元素大小,a[ 2 ]、a[ 5 ]、a[ 32 ] 三項元素,分別為 33、12 、1。



字元陣列

(範例)
  1. char word [ ] = {  'H',  'e',  'l',  'l',  'o' };
  2. int  i ;

  3. for (  i = 0, i < 4 , i++  )
  4.     NSLog ( "%c", word [ i ] );

若在陣列元素的最後面加上 ‘\0' 空字元,表示建立了『 字串 』。

所以我們在輸出字串的時候,可以使用 %s 格式告訴NSLog持續印出字串,一直到 '\0' 停止。
如下:
  1. char word [ ] = {  'H',  'e',  'l',  'l',  'o', '\0' };
  2.     NSLog ( "%s",word );


多維陣列

上一個篇所看到的都是線性陣列 ( linear array ),接下來的重點在於介紹多為陣列。
下方就是二為陣列的範例,二維陣列又被稱為矩陣 ( matrix )。
12167-21
2-23-30
6871238
二維陣列在數學式中使用雙下標來表示 : 
i 代表橫向的列,j 代表縱向的行
在程式中則會這樣表達 : 
M [ i ] [ j ]
若將第二列第一行的值 ( 2 ) 與第一列第四行的值 ( -21 ) 相加,並將其結果 ( -19 ) 指定給sum,該如何表示:

sum = M [ 1 ][ 0 ] + M [ 0 ][ 3 ]
若要將M定義為 3 列 4 行的二維陣列,一共20個元素,每一元素都為整數,該如何表示:
  1. int    M [ 3 ] [ 4 ] = {
  2.                                   { 12,    1,    67, -21},
  3.                                   {   2, -23,     -3,    0},
  4.                                   {   6,   87, 123,    8}
  5.           };

需要注意:

  • 二為陣列初始化以『列』為排序主軸。
  • 使用『 { } 』來區分開每一列,並用『 , 』區隔開來。
多為陣列與一為陣列相同,只要不指定其初始值,都預設初始為 0 。

留言

這個網誌中的熱門文章

[GoPro] 副檔名 LRV 和 THM 到底是什麼?

[Mac] 資料夾半透明無法開啟

[Git] Git rename from index.lock to index failed.