
- 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 語言中的陣列?
C語言中的陣列是相同資料型別的資料項的集合。陣列可以儲存一個或多個相同資料型別的值,這些值可以是基本資料型別(int、float、char),也可以是使用者定義型別,例如結構體或指標。在 C 語言中,陣列中元素的型別應與陣列本身的資料型別匹配。
陣列的大小,也稱為陣列的長度,必須在宣告中指定。一旦宣告,C 語言陣列的大小就不能更改。當宣告陣列時,編譯器會分配儲存宣告的元素數量所需的連續記憶體塊。
為什麼我們在 C 語言中使用陣列?
陣列用於儲存和操作相同型別的資料。
假設我們要儲存 10 名學生的成績並求平均值。我們宣告 10 個不同的變數來儲存 10 個不同的值,如下所示:
int a = 50, b = 55, c = 67, . . . ; float avg = (float)(a + b + c +. . . ) / 10;
這些變數將在記憶體中分散開來,它們之間沒有任何關係。重要的是,如果我們想擴充套件求 100(或更多)名學生平均值的問題,那麼宣告如此多的單個變數變得不切實際。
陣列提供了一種緊湊且記憶體高效的解決方案。由於陣列中的元素儲存在相鄰的位置,因此我們可以輕鬆地訪問相對於當前元素的任何元素。由於每個元素都有一個索引,因此可以對其進行直接操作。
示例:在 C 語言中使用陣列
回到儲存 10 名學生的成績並求平均值的問題,使用陣列的解決方案將是:
#include <stdio.h> int main(){ int marks[10] = {50, 55, 67, 73, 45, 21, 39, 70, 49, 51}; int i, sum = 0; float avg; for (i = 0; i <= 9; i++){ sum += marks[i]; } avg = (float)sum / 10; printf("Average: %f", avg); return 0; }
輸出
執行程式碼並檢查其輸出:
Average: 52.000000
陣列元素儲存在連續的記憶體位置。每個元素都由從“0”開始的索引標識。最低地址對應於第一個元素,最高地址對應於最後一個元素。

在 C 語言中宣告陣列
要在 C 語言中宣告陣列,您需要指定元素的型別以及要儲存的元素數量。
宣告陣列的語法
type arrayName[size];
“size”必須是一個大於零的整數常量,其“type”可以是任何有效的 C 語言資料型別。在 C 語言中宣告陣列的方法有很多種。
示例:在 C 語言中宣告陣列
在下面的示例中,我們聲明瞭一個包含 5 個整數的陣列,並列印所有陣列元素的索引和值:
#include <stdio.h> int main(){ int arr[5]; int i; for (i = 0; i <= 4; i++){ printf("a[%d]: %d\n", i, arr[i]); } return 0; }
輸出
執行程式碼並檢查其輸出:
a[0]: -133071639 a[1]: 32767 a[2]: 100 a[3]: 0 a[4]: 4096
在 C 語言中初始化陣列
在宣告陣列時,您可以透過提供用花括號 {} 括起來的逗號分隔的值集來初始化它。
初始化陣列的語法
data_type array_name [size] = {value1, value2, value3, ...};
初始化陣列的示例
以下示例演示了整數陣列的初始化
// Initialization of an integer array #include <stdio.h> int main() { int numbers[5] = {10, 20, 30, 40, 50}; int i; // loop counter // Printing array elements printf("The array elements are : "); for (i = 0; i < 5; i++) { printf("%d ", numbers[i]); } return 0; }
輸出
The array elements are : 10 20 30 40 50
將所有陣列元素初始化為 0 的示例
要將所有元素初始化為 0,請將其放在花括號內
#include <stdio.h> int main(){ int arr[5] = {0}; int i; for(i = 0; i <= 4; i++){ printf("a[%d]: %d\n", i, arr[i]); } return 0; }
輸出
執行此程式碼時,將產生以下輸出:
a[0]: 0 a[1]: 0 a[2]: 0 a[3]: 0 a[4]: 0
部分初始化陣列的示例
如果值的列表小於陣列的大小,則其餘元素將初始化為“0”。
#include <stdio.h> int main(){ int arr[5] = {1,2}; int i; for(i = 0; i <= 4; i++){ printf("a[%d]: %d\n", i, arr[i]); } return 0; }
輸出
執行此程式碼時,將產生以下輸出:
a[0]: 1 a[1]: 2 a[2]: 0 a[3]: 0 a[4]: 0
部分和特定元素初始化的示例
如果陣列被部分初始化,則可以在方括號中指定元素。
#include <stdio.h> int main(){ int a[5] = {1,2, [4] = 4}; int i; for(i = 0; i <= 4; i++){ printf("a[%d]: %d\n", i, a[i]); } return 0; }
輸出
執行後,將產生以下輸出:
a[0]: 1 a[1]: 2 a[2]: 0 a[3]: 0 a[4]: 4
獲取 C 語言中陣列的大小
編譯器分配一個連續的記憶體塊。分配的記憶體大小取決於陣列的資料型別。
示例 1:整數陣列的大小
如果聲明瞭一個包含 5 個元素的整數陣列,則陣列以位元組為單位的大小將為“sizeof(int) x 5”
#include <stdio.h> int main(){ int arr[5] = {1, 2, 3, 4, 5}; printf("Size of array: %ld", sizeof(arr)); return 0; }
輸出
執行後,您將獲得以下輸出:
Size of array: 20
sizeof 運算子返回變數佔用的位元組數。
示例 2:陣列元素的相鄰地址
每個int的大小為 4 個位元組。編譯器為每個元素分配相鄰的位置。
#include <stdio.h> int main(){ int a[] = {1, 2, 3, 4, 5}; int i; for(i = 0; i < 4; i++){ printf("a[%d]: %d \t Address: %d\n", i, a[i], &a[i]); } return 0; }
輸出
執行程式碼並檢查其輸出:
a[0]: 1 Address: 2102703872 a[1]: 2 Address: 2102703876 a[2]: 3 Address: 2102703880 a[3]: 4 Address: 2102703884
在此陣列中,每個元素都是int型別。因此,第 0 個元素佔用前 4 個位元組 642016 到 19。下一個下標處的元素佔用接下來的 4 個位元組,依此類推。
示例 3:雙精度型別陣列
如果我們有double型別的陣列,則每個下標處的元素佔用 8 個位元組
#include <stdio.h> int main(){ double a[] = {1.1, 2.2, 3.3, 4.4, 5.5}; int i; for(i = 0; i < 4; i++){ printf("a[%d]: %f \t Address: %ld\n", i, a[i], &a[i]); } return 0; }
輸出
執行程式碼並檢查其輸出:
a[0]: 1.100000 Address: 140720746288624 a[1]: 2.200000 Address: 140720746288632 a[2]: 3.300000 Address: 140720746288640 a[3]: 4.400000 Address: 140720746288648
示例 4:字元陣列的大小
“char”變數的長度為 1 個位元組。因此,char 陣列的長度將等於陣列的大小。
#include <stdio.h> int main(){ char a[] = "Hello"; int i; for (i=0; i<5; i++){ printf("a[%d]: %c address: %ld\n", i, a[i], &a[i]); } return 0; }
輸出
執行程式碼並檢查其輸出:
a[0]: H address: 6422038 a[1]: e address: 6422039 a[2]: l address: 6422040 a[3]: l address: 6422041 a[4]: o address: 6422042
在 C 語言中訪問陣列元素
陣列中的每個元素都由一個唯一的遞增索引標識,從“0”開始。要按索引訪問元素,可以透過在陣列名稱後方方括號內放置元素的索引來實現。
透過在陣列名稱後方的方括號內指定所需元素的索引(偏移量)來訪問陣列的元素。例如:
double salary = balance[9];
上述語句將從陣列中獲取第 10 個元素並將該值賦給“salary”。
訪問 C 語言中陣列元素的示例
以下示例顯示瞭如何使用上述所有三個概念,即宣告、賦值和訪問陣列。
#include <stdio.h> int main(){ int n[5]; /* n is an array of 5 integers */ int i, j; /* initialize elements of array n to 0 */ for(i = 0; i < 5; i++){ n[i] = i + 100; } /* output each array element's value */ for(j = 0; j < 5; j++){ printf("n[%d] = %d\n", j, n[j]); } return 0; }
輸出
執行此程式碼後,您將獲得以下輸出:
n[0] = 100 n[1] = 101 n[2] = 102 n[3] = 103 n[4] = 104
索引允許隨機訪問陣列元素。陣列可以包含結構體變數、指標甚至其他陣列作為其元素。
更多關於 C 語言陣列的內容
陣列作為 C 語言中的一個重要概念,需要更多關注。以下與陣列相關的重要的概念對於 C 語言程式設計師來說應該清楚:
序號 | 概念 & 描述 |
---|---|
1 | 多維陣列
C 語言支援多維陣列。多維陣列最簡單的形式是二維陣列。 |
2 | 將陣列傳遞給函式
您可以透過指定陣列的名稱(不帶索引)來將指向陣列的指標傳遞給函式。 |
3 | 從函式返回陣列
C 語言允許函式返回陣列。 |
4 | 指向陣列的指標
您可以透過簡單地指定陣列名稱(不帶任何索引)來生成指向陣列第一個元素的指標。 |