
- C程式設計教程
- C - 首頁
- C語言基礎
- C - 概述
- C - 特性
- C - 歷史
- C - 環境設定
- C - 程式結構
- C - Hello World
- C - 編譯過程
- C - 註釋
- C - 詞法單元
- C - 關鍵字
- C - 識別符號
- C - 使用者輸入
- C - 基本語法
- C - 資料型別
- C - 變數
- C - 整數提升
- C - 型別轉換
- C - 型別強制轉換
- C - 布林型別
- C語言中的常量和字面量
- C - 常量
- C - 字面量
- C - 轉義序列
- C - 格式說明符
- C語言中的運算子
- C - 運算子
- C - 算術運算子
- C - 關係運算符
- C - 邏輯運算子
- C - 位運算子
- C - 賦值運算子
- C - 一元運算子
- C - 自增和自減運算子
- C - 三元運算子
- C - sizeof運算子
- C - 運算子優先順序
- C - 其他運算子
- C語言中的決策
- C - 決策
- C - if語句
- C - if...else語句
- C - 巢狀if語句
- C - switch語句
- C - 巢狀switch語句
- C語言中的迴圈
- C - 迴圈
- C - while迴圈
- C - for迴圈
- C - do...while迴圈
- C - 巢狀迴圈
- C - 無限迴圈
- C - break語句
- C - continue語句
- C - goto語句
- C語言中的函式
- C - 函式
- C - 主函式
- C - 按值呼叫函式
- C - 按引用呼叫函式
- C - 巢狀函式
- C - 可變引數函式
- C - 使用者自定義函式
- C - 回撥函式
- C - 返回語句
- C - 遞迴
- C語言中的作用域規則
- C - 作用域規則
- C - 靜態變數
- C - 全域性變數
- C語言中的陣列
- C - 陣列
- C - 陣列的特性
- C - 多維陣列
- C - 將陣列傳遞給函式
- C - 從函式返回陣列
- C - 變長陣列
- C語言中的指標
- C - 指標
- C - 指標和陣列
- C - 指標的應用
- C - 指標運算
- C - 指標陣列
- C - 指向指標的指標
- C - 將指標傳遞給函式
- C - 從函式返回指標
- C - 函式指標
- C - 指向陣列的指標
- C - 指向結構體的指標
- C - 指標鏈
- C - 指標與陣列
- C - 字元指標和函式
- C - 空指標
- C - void指標
- C - 懸空指標
- C - 解引用指標
- C - 近、遠和巨型指標
- C - 指標陣列的初始化
- C - 指標與多維陣列
- C語言中的字串
- C - 字串
- C - 字串陣列
- C - 特殊字元
- C語言中的結構體和聯合體
- C - 結構體
- C - 結構體和函式
- C - 結構體陣列
- C - 自引用結構體
- C - 查詢表
- C - 點(.)運算子
- C - 列舉(或enum)
- C - 結構體填充和打包
- C - 巢狀結構體
- C - 匿名結構體和聯合體
- C - 聯合體
- C - 位域
- C - Typedef
- C語言中的檔案處理
- C - 輸入與輸出
- C - 檔案I/O(檔案處理)
- C預處理器
- C - 預處理器
- C - 指令
- C - 預處理器運算子
- C - 宏
- C - 標頭檔案
- C語言中的記憶體管理
- C - 記憶體管理
- C - 記憶體地址
- C - 儲存類
- 其他主題
- C - 錯誤處理
- C - 可變引數
- C - 命令執行
- C - 數學函式
- C - static關鍵字
- C - 隨機數生成
- C - 命令列引數
- C程式設計資源
- C - 問答
- C - 快速指南
- C - 速查表
- C - 有用資源
- C - 討論
C語言中的多維陣列
如果陣列宣告時只使用一個方括號指定大小,則稱為一維陣列。在一維陣列中,每個元素都由其索引或下標標識。在C語言中,可以使用多個索引來模擬二維、三維或多維陣列。
C語言中的多維陣列
多維陣列可以被稱為巢狀陣列。在這種情況下,外部陣列中的每個元素本身都是一個數組。這種巢狀可以達到任意級別。如果外部陣列中的每個元素都是另一個一維陣列,則它構成一個二維陣列。依次類推,如果內部陣列是另一組一維陣列的陣列,則它是一個三維陣列,等等。
多維陣列的宣告
根據巢狀級別,多維陣列的宣告如下:
type name[size1][size2]...[sizeN];
例如,以下宣告建立一個三維整數陣列:
int threedim[3][3][3];
多維陣列可以有任意數量的維度。在本教程中,我們將學習兩種常用的多維陣列型別
- 二維陣列
- 三維陣列
C語言中的二維陣列
二維陣列是一維陣列的陣列。二維陣列的每個元素本身都是一個數組。它就像一個表格或矩陣。元素可以被認為在邏輯上排列成行和列。因此,任何元素的位置都由其行號和列號來表徵。行和列索引都從0開始。

二維陣列的宣告和初始化
以下語句宣告並初始化一個二維陣列:
int arr[3][5] = {1,2,3,4,5, 10,20,30,40,50, 5,10,15,20,25};
arr陣列有三行五列。在C語言中,二維陣列是行優先陣列。第一個方括號始終表示行維度的尺寸,第二個表示列數。顯然,該陣列有3 X 5 = 15個元素。該陣列用15個逗號分隔的值初始化,這些值放在花括號內。
元素按行順序讀入陣列,這意味著前5個元素儲存在第一行,依次類推。因此,陣列宣告中的第一個維度是可選的。
int arr[ ][5] = {1,2,3,4,5, 10,20,30,40,50, 5,10,15,20,25};
為了提高可讀性,可以將每行的元素可選地放在花括號中,如下所示:
int arr[ ][5] = { {1,2,3,4,5}, {10,20,30,40,50}, {5,10,15,20,25} };
這些數字在邏輯上以表格形式排列,如下所示:
1 | 2 | 3 | 4 | 5 |
10 | 20 | 30 | 40 | 50 |
5 | 10 | 15 | 20 | 25 |
行索引為1且列索引為2的單元格中包含30。
列印二維陣列元素的示例
下面的程式顯示二維陣列中每個元素的行和列索引:
#include <stdio.h> int main () { /* an array with 5 rows and 2 columns*/ int a[5][2] = { {0,0}, {1,2}, {2,4}, {3,6},{4,8}}; int i, j; /* output each array element's value */ for ( i = 0; i < 5; i++ ) { for ( j = 0; j < 2; j++ ) { printf("a[%d][%d] = %d\n", i,j, a[i][j] ); } } return 0; }
輸出
a[0][0] = 0 a[0][1] = 0 a[1][0] = 1 a[1][1] = 2 a[2][0] = 2 a[2][1] = 4 a[3][0] = 3 a[3][1] = 6 a[4][0] = 4 a[4][1] = 8
對於二維或多維陣列,編譯器會分配一個大小為維度乘積與資料型別大小的記憶體塊。在本例中,大小為3 X 5 X 4 = 60位元組,其中4是int資料型別的大小。
即使所有元素都儲存在連續的記憶體位置,我們也可以使用巢狀迴圈以行和列格式列印元素。
以行和列形式列印二維陣列作為矩陣的示例
以下程式以行和列列印二維陣列。
#include <stdio.h> int main() { int arr[3][5] = {1,2,3,4,5, 10,20,30,40,50, 5,10,15,20,25}; int i, j; for (i=0; i<3; i++){ for (j=0; j<5; j++){ printf("%4d", arr[i][j]); } printf("\n"); } return 0; }
輸出
1 2 3 4 5 10 20 30 40 50 5 10 15 20 25
C語言中的三維陣列
三維陣列是二維陣列的陣列,其中每個元素都是一個二維陣列。3D陣列需要三個下標來定義深度、行和列。
想象一下參加考試的學生坐在五個大廳裡,每個大廳有二十排課桌,每排有5張桌子。這樣的安排可以用一個三維陣列表示,例如:
Students[hall][row][column]
要找到每個學生,你需要三個索引,即大廳號碼、他在大廳裡的桌子的行和列。
三維陣列的示例
以下程式將數字儲存在3 X 3 X 3的陣列中:
#include<stdio.h> int main(){ int i, j, k; int arr[3][3][3]= { { {11, 12, 13}, {14, 15, 16}, {17, 18, 19} }, { {21, 22, 23}, {24, 25, 26}, {27, 28, 29} }, { {31, 32, 33}, {34, 35, 36}, {37, 38, 39} }, }; printf("Printing 3D Array Elements\n"); for(i=0;i<3;i++) { for(j=0;j<3;j++){ for(k=0;k<3;k++){ printf("%4d",arr[i][j][k]); } printf("\n"); } printf("\n"); } return 0; }
輸出
Printing 3D Array Elements 11 12 13 14 15 16 17 18 19 21 22 23 24 25 26 27 28 29 31 32 33 34 35 36 37 38 39
多維陣列元素的行求和
您可以透過使用索引訪問元素來找到所有元素的行求和或列求和。對於三維陣列,您需要使用深度、行和列索引。對於二維陣列,您需要使用行和列索引。這裡我們使用二維陣列。
示例:數字的行求和
在下面的程式中,顯示了二維陣列中每行整數元素的和。
#include <stdio.h> int main() { int arr[3][5] = {{1,2,3,4,5}, {10,20,30,40,50}, {5,10,15,20,25}}; int i, j; int sum; for (i=0; i<3; i++){ sum=0; for (j=0; j<5; j++){ sum+=arr[i][j]; } printf("Sum of row %d: %d\n", i, sum); } return 0; }
輸出
Sum of row 0: 15 Sum of row 1: 150 Sum of row 2: 75
矩陣乘法
矩陣代數是數學的一個分支,其中矩陣是按行和列排列的數字的二維陣列。兩個矩陣的乘法只有在第一個矩陣的列數等於第二個矩陣的行數時才可能。兩個相容矩陣的乘積等於第一個矩陣的行與第二個矩陣的列之間的點積。
如果兩個矩陣的大小為a[m][n]和b[p][q],則其乘積的大小為(只有當n等於p時乘法才可能)c[m][q]。
兩個矩陣的乘積是矩陣A的某一行的條目與矩陣B的某一列的對應條目的乘積之和。
二維陣列(矩陣)乘法的示例
以下程式執行兩個矩陣的乘法。
#include<stdio.h> int main(){ int mat1[3][3] = { {2, 4, 1} , {2, 3, 9} , {3, 1, 8} }; int mat2[3][3] = { {1, 2, 3} , {3, 6, 1} , {2, 4, 7} }; int mat3[3][3], sum=0, i, j, k; for(i=0; i<3; i++){ for(j=0; j<3; j++){ sum=0; for(k=0; k<3; k++) sum = sum + mat1[i][k] * mat2[k][j]; mat3[i][j] = sum; } } printf("\nMatrix 1 ...\n"); for(i=0; i<3; i++){ for(j=0; j<3; j++) printf("%d\t", mat1[i][j]); printf("\n"); } printf("\nMatrix 2 ...\n"); for(i=0; i<3; i++){ for(j=0; j<3; j++) printf("%d\t", mat2[i][j]); printf("\n"); } printf("\nMultiplication of the two given Matrices: \n"); for(i=0; i<3; i++){ for(j=0; j<3; j++) printf("%d\t", mat3[i][j]); printf("\n"); } return 0; }
輸出
Matrix 1 ... 2 4 1 2 3 9 3 1 8 Matrix 2 ... 1 2 3 3 6 1 2 4 7 Multiplication of the two given Matrices: 16 32 17 29 58 72 22 44 66