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


*/

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

留言
avatar-img
留言分享你的想法!
avatar-img
電資鼠 - 您的學習好夥伴
8會員
206內容數
在當今數位時代,電資領域人才需求爆發式成長,不論是前端網頁設計、嵌入式開發、人工智慧、物聯網還是軟硬體整合,這些技術都在改變世界。而掌握 C/C++、Python、數位邏輯、電路學與嵌入式開發等大學電資領域的課程,正是進入這個高薪、高需求產業的關鍵!
2025/03/07
本章節將探討左下三角稀疏矩陣。
Thumbnail
2025/03/07
本章節將探討左下三角稀疏矩陣。
Thumbnail
2025/03/07
相信讀者現在對於鏈結串列有了更多的認識,所以我再進一步,示範更多關於鏈結串列的操作,這部分示範會將程式模組化。將鏈結串列的操作寫進一個標頭檔,並在主程式中引入。
Thumbnail
2025/03/07
相信讀者現在對於鏈結串列有了更多的認識,所以我再進一步,示範更多關於鏈結串列的操作,這部分示範會將程式模組化。將鏈結串列的操作寫進一個標頭檔,並在主程式中引入。
Thumbnail
2025/03/07
本章節示範透過「陣列索引」和「指標運算」兩種方式來存取同一個二維陣列 a,並印出相同的數值以及對應的位址,以說明它們其實指向的是同一塊連續的記憶體空間。本文將依序解釋各段程式碼,並示範可能的執行結果與背後原理。
Thumbnail
2025/03/07
本章節示範透過「陣列索引」和「指標運算」兩種方式來存取同一個二維陣列 a,並印出相同的數值以及對應的位址,以說明它們其實指向的是同一塊連續的記憶體空間。本文將依序解釋各段程式碼,並示範可能的執行結果與背後原理。
Thumbnail
看更多
你可能也想看
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
高效生活,幫助你找回更多自己的時間 歡迎來到 AL 的 Googlesheet 學習筆記系列文章。在這個系列中,我們將一步步介紹各種函數,並將它們應用於日常生活中,加速工作、提高效率。 今天要介紹的是使用 Index 、 Counta 函數尋找最後一列的資料!
Thumbnail
高效生活,幫助你找回更多自己的時間 歡迎來到 AL 的 Googlesheet 學習筆記系列文章。在這個系列中,我們將一步步介紹各種函數,並將它們應用於日常生活中,加速工作、提高效率。 今天要介紹的是使用 Index 、 Counta 函數尋找最後一列的資料!
Thumbnail
【這個系列,目標是以比較輕鬆的方式讓大家一起學習AE表達式。】 本文是番外篇 3,主要是一些概念的補充,介紹陣列。
Thumbnail
【這個系列,目標是以比較輕鬆的方式讓大家一起學習AE表達式。】 本文是番外篇 3,主要是一些概念的補充,介紹陣列。
Thumbnail
這篇文章介紹了排列和組閤中的錯位排列和排容原理,並提供了一種相對樸實的解題方法。透過例子詳細解釋了選擇情況下的數學原理,讓讀者能夠理解並吸收。文章通過課堂上難以推敲的題目,提出了一個相對簡單的方式來解題。 圖片選自@pngtree
Thumbnail
這篇文章介紹了排列和組閤中的錯位排列和排容原理,並提供了一種相對樸實的解題方法。透過例子詳細解釋了選擇情況下的數學原理,讓讀者能夠理解並吸收。文章通過課堂上難以推敲的題目,提出了一個相對簡單的方式來解題。 圖片選自@pngtree
Thumbnail
C 語言的函式庫定義了許多好用的函式,在寫 C++ 的時候可以拿來用。這是因為 C++ 當初在設計的時候,就有刻意把 C 涵蓋進來。 基本用法 首先要導入 C 語言的標準函式庫: #include <cstdlib> 以 c 作為開頭表示它是 C 語言的函式庫,只是被我們拿來 C++ 的程式
Thumbnail
C 語言的函式庫定義了許多好用的函式,在寫 C++ 的時候可以拿來用。這是因為 C++ 當初在設計的時候,就有刻意把 C 涵蓋進來。 基本用法 首先要導入 C 語言的標準函式庫: #include <cstdlib> 以 c 作為開頭表示它是 C 語言的函式庫,只是被我們拿來 C++ 的程式
Thumbnail
高中數學主題練習—C計算(一)
Thumbnail
高中數學主題練習—C計算(一)
Thumbnail
有個簡單的方法,把儲存格的文字串連起來!一起來看看怎麼做,很好操作唷!
Thumbnail
有個簡單的方法,把儲存格的文字串連起來!一起來看看怎麼做,很好操作唷!
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News