[計程] 陣列簡介
前言
為什麼要打這一篇呢?因為我做 單班計程 HW 1-2 的時候想不出
不用陣列的方法,又聽說還沒有講過陣列,所以稍微講解一下陣列
要怎麼用。
陣列簡介
我們可以先把陣列想像成表格的儲存格,每一個儲存格可以存一個
數值/元素。拿 int 為例子,
int array[5];
就是宣告一個有五個儲存格的表格,每一個儲存格可以存放一個
int。
而每一個儲存格都有一個索引,從前面開始,依序為 0, 1, 2, 3,
4。如果我要存取第一個儲存格,我就必需要用
array[0]
我們來看下面的表格:
array =
0 1 2 3 4 <= 這就是索引
┌───┬───┬───┬───┬───┐
│7689 │2348 │8608 │90 │1 │<= 這是儲存格(元素)
└───┴───┴───┴───┴───┘
如果我 printf("%d", array[0]) 會印出 7689,如果我要印其他的
值,則用法如下:
printf("%d", array[1]); // 2348
printf("%d", array[2]); // 8608
其餘請自行類推。
陣列宣告
陣列的宣告,原則上是
元素型別 陣列名稱 [ 陣列大小 ] ;
* 元素型別 可以是 char, short, int, long, float, double,
long double 族繁不及備載。
* 陣列名稱 必需是 合法的 C 語言變數名稱。也就是滿足以下的正
規表達示。/[A-Za-z_]+[A-Za-z0-9_]*/
* 陣列大小 是你想要的大小,也就是有多小儲存格。注意:最大的
索引會比這一個值少 1。
例如:
int a[10];
float b[2];
char c[1234];
還有一些陣列宣告的變化型。我們可以在宣告陣列的時候,同時加上
初始值,方法如下:
元素型別 陣列名稱 [ 陣列大小 ] = { 元素0, 元素1, .... };
例如:
int array[5] = {1, 2, 4, 8, 16};
會讓我們有:
array =
0 1 2 3 4 <= 這就是索引
┌───┬───┬───┬───┬───┐
│1 │2 │4 │8 │16 │<= 這是儲存格(元素)
└───┴───┴───┴───┴───┘
如果你有加上初始值,最左邊的維度可以省略(編譯器會幫我們算出
來),如下:
int array[] = {1, 2, 4, 8, 16, 32};
等價
int array[6] = {1, 2, 4, 8, 16, 32};
陣列元素的存取
如果要存取單一個元素,你可以用下標運算子(subscript),也就是在
陣列名字之後加上 [],例如:
int array[5] = {1, 2, 4, 8, 16};
array[0] == 1
array[1] == 2
array[2] == 4
array[3] == 8
array[4] == 16
如果要印出來,可以配合 for 來使用。
for (i = 0; i < 5; ++i) {
printf("%d\n", array[i]);
}
如果要當成輸入,也是一樣,
for (i = 0; i < 5; ++i) {
scanf("%d", &(array[i]));
}
如果我們要改其中的一個值,就像用一般的變數一樣。例如
array[3] = 12345;
而如果要 複製 一個陣列,我們必需一個元素一個元素去改,
如下,不可以直接指派:
int array2[5];
int i;
for (i = 0; i < 5; ++i) {
array2[i] = array[i];
}
陣列的常見錯誤
<錯> 陣列指派(Assign)
int array[5] = {1, 2, 4, 8, 16};
int array2[5] = array; /* 錯!錯!錯!錯!錯!沒有這種寫法 */
這一個當然也錯:
int array[5] = {1, 2, 4, 8, 16};
int array2[5];
array2 = array;
<錯> 溢位(通常可以正常編譯,不過會「本程式即將要關閉」或 RE)
int array[5] = {1, 2, 4, 8, 16};
int i;
for (i = 1; i <= 5; ++i) {
printf("%d\n", array[i]);
}
<錯> 動態的陣列大小
int size;
scanf("%d", &size);
int array[size];
......
結語
這一次陣列暫時介紹到這裡,有機會再向大家介紹其他陣列還有
指標的用法。如果這一篇文有錯,還請大家指教。
還有,我想問:鋼彈在哪裡?這不是鋼彈,這不是鋼彈...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.241.166
※ 編輯: LoganChien 來自: 140.112.241.166 (10/01 18:38)
推
10/01 18:40, , 1F
10/01 18:40, 1F
推
10/01 20:34, , 2F
10/01 20:34, 2F
推
10/01 21:37, , 3F
10/01 21:37, 3F
推
10/01 21:42, , 4F
10/01 21:42, 4F
推
10/01 22:34, , 5F
10/01 22:34, 5F
※ 編輯: LoganChien 來自: 140.112.241.166 (10/01 22:39)
→
10/01 22:40, , 6F
10/01 22:40, 6F
→
10/01 23:25, , 7F
10/01 23:25, 7F
→
10/01 23:29, , 8F
10/01 23:29, 8F
→
10/01 23:29, , 9F
10/01 23:29, 9F
推
10/01 23:29, , 10F
10/01 23:29, 10F
→
10/01 23:30, , 11F
10/01 23:30, 11F
→
10/01 23:30, , 12F
10/01 23:30, 12F
推
10/01 23:34, , 13F
10/01 23:34, 13F
→
10/01 23:40, , 14F
10/01 23:40, 14F
→
10/01 23:41, , 15F
10/01 23:41, 15F
推
10/01 23:42, , 16F
10/01 23:42, 16F
→
10/01 23:47, , 17F
10/01 23:47, 17F
→
10/01 23:49, , 18F
10/01 23:49, 18F
→
10/01 23:49, , 19F
10/01 23:49, 19F
→
10/01 23:53, , 20F
10/01 23:53, 20F
→
10/02 00:04, , 21F
10/02 00:04, 21F
→
10/02 00:07, , 22F
10/02 00:07, 22F
→
10/02 00:08, , 23F
10/02 00:08, 23F
推
10/02 00:09, , 24F
10/02 00:09, 24F
推
10/02 00:15, , 25F
10/02 00:15, 25F
推
10/02 00:43, , 26F
10/02 00:43, 26F
推
10/02 00:49, , 27F
10/02 00:49, 27F
推
10/02 00:51, , 28F
10/02 00:51, 28F
推
10/02 00:54, , 29F
10/02 00:54, 29F
推
10/02 01:08, , 30F
10/02 01:08, 30F
推
10/02 01:08, , 31F
10/02 01:08, 31F
推
10/02 01:11, , 32F
10/02 01:11, 32F
→
10/03 00:46, , 33F
10/03 00:46, 33F
推
10/03 17:31, , 34F
10/03 17:31, 34F
→
10/03 17:32, , 35F
10/03 17:32, 35F
→
10/03 17:32, , 36F
10/03 17:32, 36F
→
10/03 23:29, , 37F
10/03 23:29, 37F
→
10/03 23:30, , 38F
10/03 23:30, 38F
→
10/03 23:31, , 39F
10/03 23:31, 39F
討論串 (同標題文章)