C語言自學攻略-陣列

更新於 發佈於 閱讀時間約 7 分鐘

前導

陣列是為了儲存一筆連續的資料而宣告的。假如我今天有五個學生的成績,一一宣告成變數儲存不是一個好方法,在做資料處理時也不方便。這時如果我們宣告一個陣列運來儲存這些資料,一切都變得方便許多。下面是陣列簡單示範:

#include <stdio.h>

int main() {
int grade[5]={60,70,80,90,100}; //宣告一個儲存5個int型別的grade陣列
//int grade[]={60,70,80,90,100}; 這樣也可以,編譯器會自動判斷陣列大小。
for(int i=0; i<5; i++)
{
printf("第%d位學生的成績是:%d分\n",i+1,grade[i]);
}

return 0;
}
  • 從上面的程式碼中,我們可以學到陣列搭配迴圈讓我們很方便的輸出資料,而其中我們注意到,如果要存取陣列中的數值時,我們可以使用grade[索引值]來存取,很明顯地,你能看出陣列第一個數值的索引值為0,陣列第五個數值的索引值為4,這個觀念需要了解。

多維陣列

二維陣列大概可以這樣想像:

raw-image

而三維陣列就是由多個二維陣列所組成。

陣列的合法宣告

上面已經示範了一維陣列,接下來講多維陣列的合法宣告。

二維陣列

  1. 最基本的二維陣列
int arr[3][4]; // 3 列 4 行的整數陣列,裡面是記憶體殘值
  • 含義
    • 這是一個3 列 4 行的二維整數陣列,總共有 3 x 4 = 12 個元素。
    • 每一個元素的訪問方式是:arr[i][j],其中 i 表示列,j 表示行。
    • i 的範圍是 0 ~ 2,j 的範圍是 0 ~ 3

  1. 使用變數指定大小
#include <stdio.h>
int main() {
int rows = 3, cols = 4;
int arr[rows][cols]; // 使用變數來定義二維陣列的大小,這樣宣告的話,沒辦法初始化數值。
//以下為正確做法
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < cols; j++)
{
arr[i][j] = 0;
}
}
return 0;
}

  1. 使用初始化列表進行初始化
int arr[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
  • 含義
    • 定義了一個 3x4 的整數陣列,並賦值。

  1. 使用0初始化
int arr[3][4] = {0};
  • 含義
    • 定義了一個 3x4 的整數陣列,全部賦值為0。

  1. 使用第一個數值進行初始化
int arr[3][4] = {{1},{2},{3}};
/*
只賦予第一個數值,其餘補0
陣列內容為
{1, 0, 0, 0},
{2, 0, 0, 0},
{3, 0, 0, 0}
*/

  1. 不指定列數,讓編譯器自動計算
int arr[][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
  • 含義
    • 不指定列數,C 編譯器會自動判斷。
    • 行數必須指定。

三維陣列

  1. 最基本的三維陣列
int arr[2][3][4]; // 2 個平面,每個平面有 3 X 4 個元素
  • 含義
    • 這是一個 2x3x4 的三維陣列,總共有 2 x 3 x 4 = 24 個元素。
    • 每個元素的存取方式為 arr[k][i][j],其中: k 表示深度(第幾個平面)。 i 表示列(第幾列)。 j 表示行(第幾行)。

  1. 初始化三維陣列
int arr[2][3][4] = {
{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}},
{{13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24}}
};
  • 含義
    • 定義了一個 2x3x4 的三維陣列,並初始化 24 個元素。

  1. 不指定第一個數,讓編譯器自動推斷
int arr[][3][4] = {
{{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}},
{{13, 14, 15, 16}, {17, 18, 19, 20}, {21, 22, 23, 24}}
};

  1. 輸出範例
#include <stdio.h>

int main() {
// 定義一個 2x3x4 的三維陣列,總共有 2 個平面,每個平面 3 列 4 行
int arr[2][3][4] = {
{
{1},
{5, 6, 7, 8},
{9, 10, 11, 12}
},
{
{13, 14, 15, 16},
{17, 18, 19, 20},
{21, 22, 23, 24}
}
};

// 三層的 for 迴圈,分別控制 depth, row, column
for (int d = 0; d < 2; d++) { // 控制深度 (第幾個平面)
printf("平面 %d:\n", d + 1);
for (int i = 0; i < 3; i++) { // 控制列
for (int j = 0; j < 4; j++) { // 控制行
printf("arr[%d][%d][%d] = %2d ", d, i, j, arr[d][i][j]);
}
printf("\n"); // 換行,代表一行結束
}
printf("\n"); // 平面結束後,額外換行
}

return 0;
}
/* 輸出
平面 1:
arr[0][0][0] = 1 arr[0][0][1] = 0 arr[0][0][2] = 0 arr[0][0][3] = 0
arr[0][1][0] = 5 arr[0][1][1] = 6 arr[0][1][2] = 7 arr[0][1][3] = 8
arr[0][2][0] = 9 arr[0][2][1] = 10 arr[0][2][2] = 11 arr[0][2][3] = 12

平面 2:
arr[1][0][0] = 13 arr[1][0][1] = 14 arr[1][0][2] = 15 arr[1][0][3] = 16
arr[1][1][0] = 17 arr[1][1][1] = 18 arr[1][1][2] = 19 arr[1][1][3] = 20
arr[1][2][0] = 21 arr[1][2][1] = 22 arr[1][2][2] = 23 arr[1][2][3] = 24


*/

陣列的內容大致如上,當然,陣列若配上指標,玩法會變得很多樣化,之後的章節會介紹到指標。

在當今數位時代,電資領域人才需求爆發式成長,不論是前端網頁設計、嵌入式開發、人工智慧、物聯網還是軟硬體整合,這些技術都在改變世界。而掌握 C/C++、Python、數位邏輯、電路學與嵌入式開發等大學電資領域的課程,正是進入這個高薪、高需求產業的關鍵!
留言
avatar-img
留言分享你的想法!

































































本章將介紹 C 語言的條件控制與迴圈控制,這是讓程式具備 邏輯判斷能力與重複執行能力 的關鍵技術。透過 if 判斷式、switch 多重選擇、for 迴圈、while 迴圈 等控制結構,我們可以有效管理程式流程,提升代碼的 效率與可讀性。
本章將介紹 C 語言的運算子 (Operators),這是程式語言的基礎,負責執行數值計算、條件判斷與邏輯運算。我們將最先學習變數在記憶體中的樣子,這是非常重要的觀念,接著漸入到算術運算、關係運算、邏輯運算、位元運算與三元運算子等,並透過 運算子優先順序 來確保正確的運算執行順序。
本文章介紹了 C 語言putchar, getchar, puts, fgets函數及其使用方法與常見問題解決方案。包含程式碼範例、問題分析及解決方法,幫助讀者理解並避免輸入錯誤。
在C語言中,scanf()可能並沒有我們所想的那麼簡單且單調,本章節會列出4點補充的使用方式。這些都是容易忽視的小知識。
本章將介紹 C 語言的輸入與輸出 ,透過本章系統性的學習與使用示範,你將能夠靈活掌握 C 語言的資料讀取與輸出技巧。
本章將介紹 C 語言中的變數與常數,這是學習 C 語言的基礎概念,決定了 數據儲存、運算與管理方式。我們將學習如何 宣告變數與常數,並透過一個 實際範例 來開始撰寫C語言。
本章將介紹 C 語言的條件控制與迴圈控制,這是讓程式具備 邏輯判斷能力與重複執行能力 的關鍵技術。透過 if 判斷式、switch 多重選擇、for 迴圈、while 迴圈 等控制結構,我們可以有效管理程式流程,提升代碼的 效率與可讀性。
本章將介紹 C 語言的運算子 (Operators),這是程式語言的基礎,負責執行數值計算、條件判斷與邏輯運算。我們將最先學習變數在記憶體中的樣子,這是非常重要的觀念,接著漸入到算術運算、關係運算、邏輯運算、位元運算與三元運算子等,並透過 運算子優先順序 來確保正確的運算執行順序。
本文章介紹了 C 語言putchar, getchar, puts, fgets函數及其使用方法與常見問題解決方案。包含程式碼範例、問題分析及解決方法,幫助讀者理解並避免輸入錯誤。
在C語言中,scanf()可能並沒有我們所想的那麼簡單且單調,本章節會列出4點補充的使用方式。這些都是容易忽視的小知識。
本章將介紹 C 語言的輸入與輸出 ,透過本章系統性的學習與使用示範,你將能夠靈活掌握 C 語言的資料讀取與輸出技巧。
本章將介紹 C 語言中的變數與常數,這是學習 C 語言的基礎概念,決定了 數據儲存、運算與管理方式。我們將學習如何 宣告變數與常數,並透過一個 實際範例 來開始撰寫C語言。
你可能也想看
Google News 追蹤
Thumbnail
【這個系列,目標是以比較輕鬆的方式讓大家一起學習AE表達式。】 本文是番外篇 3,主要是一些概念的補充,介紹陣列。
NumPy(Numeric Python)是Python中用於科學計算的核心庫之一。它提供了高性能的多維陣列對象(即ndarray)以及用於處理這些陣列的各種函數和工具。 在NumPy中,有幾個常用的指令可以用來創建陣列
Thumbnail
這篇文章介紹了排列和組閤中的錯位排列和排容原理,並提供了一種相對樸實的解題方法。透過例子詳細解釋了選擇情況下的數學原理,讓讀者能夠理解並吸收。文章通過課堂上難以推敲的題目,提出了一個相對簡單的方式來解題。 圖片選自@pngtree
※ 常用arry型態的方法: 長度: length 查詢第N個元素: [] 查詢元素在第N個: indexOf( ) 判斷是否為array: isArray() 新增和刪除: push():新增後面的數值 unshift():新增前面的數值 pop():刪除後面的數值 sh
※ 認識變數: 變數(variable)是在程式裡面把東西存起來的概念。 基於不讓電腦每次都需要重新運算,把需要花時間運算的東西先存起來,之後再直接拿出來使用,所以我們需要變數。 變數儲存的位置在電腦裡的記憶體。變數就像是一個箱子,記憶體就像是一個倉庫。箱子的名稱就是變數名稱,箱子的內容物就是
Thumbnail
有個簡單的方法,把儲存格的文字串連起來!一起來看看怎麼做,很好操作唷!
Thumbnail
【這個系列,目標是以比較輕鬆的方式讓大家一起學習AE表達式。】 本文是番外篇 3,主要是一些概念的補充,介紹陣列。
NumPy(Numeric Python)是Python中用於科學計算的核心庫之一。它提供了高性能的多維陣列對象(即ndarray)以及用於處理這些陣列的各種函數和工具。 在NumPy中,有幾個常用的指令可以用來創建陣列
Thumbnail
這篇文章介紹了排列和組閤中的錯位排列和排容原理,並提供了一種相對樸實的解題方法。透過例子詳細解釋了選擇情況下的數學原理,讓讀者能夠理解並吸收。文章通過課堂上難以推敲的題目,提出了一個相對簡單的方式來解題。 圖片選自@pngtree
※ 常用arry型態的方法: 長度: length 查詢第N個元素: [] 查詢元素在第N個: indexOf( ) 判斷是否為array: isArray() 新增和刪除: push():新增後面的數值 unshift():新增前面的數值 pop():刪除後面的數值 sh
※ 認識變數: 變數(variable)是在程式裡面把東西存起來的概念。 基於不讓電腦每次都需要重新運算,把需要花時間運算的東西先存起來,之後再直接拿出來使用,所以我們需要變數。 變數儲存的位置在電腦裡的記憶體。變數就像是一個箱子,記憶體就像是一個倉庫。箱子的名稱就是變數名稱,箱子的內容物就是
Thumbnail
有個簡單的方法,把儲存格的文字串連起來!一起來看看怎麼做,很好操作唷!