
- 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語言 - return 語句
- 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語言 - NULL 指標
- 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 arr[] = {50, 67.55, "hello", 21};
編譯器會發出警告:
initialization of 'int' from 'char *' makes integer from pointer without a cast [-Wint-conversion]|
連續記憶體分配
陣列的所有元素都儲存在連續的記憶體位置,這意味著它們佔據彼此相鄰的記憶體塊。這允許高效的隨機訪問和記憶體管理。

固定大小
陣列的大小在宣告時是固定的,並且在程式執行期間不能更改。這意味著您需要預先知道所需的最大元素數量。在C語言中,陣列的大小不能用變數來定義。
//這是允許的
#define SIZE = 10 int arr[SIZE];
//這也是允許的
const SIZE = 10; int arr[SIZE];
//這是不允許的
int SIZE = 10; int arr[SIZE];
//大小必須是整數。這將導致錯誤
float num[10.5] = {50, 55, 67, 73, 45, 21, 39, 70, 49, 51};
長度取決於型別
由於陣列可以儲存所有相同型別的元素,因此它佔用的總記憶體取決於資料型別。
示例
#include<stdio.h> int main() { int num[10] = {50, 55, 67, 73, 45, 21, 39, 70, 49, 51}; int size = sizeof(num) / sizeof(int); printf("element at lower bound num[0]: %d \n", num[0]); printf("at upper bound: %d byte \n", num[size-1]); printf("length of int array: %ld \n", sizeof(num)); double nm[10] = {50, 55, 67, 73, 45, 21, 39, 70, 49, 51}; size = sizeof(nm) / sizeof(double); printf("element at lower bound nm[0]: %f \n", nm[0]); printf("element at upper bound: %f \n", nm[size-1]); printf("byte length of double array: %ld \n", sizeof(nm)); return 0; }
輸出
element at lower bound num[0]: 50 at upper bound: 51 byte length of int array: 40 element at lower bound nm[0]: 50.000000 element at upper bound: 51.000000 byte length of double array: 80
索引
陣列中的每個元素都有一個唯一的索引,從0開始。可以使用方括號中包含的索引訪問單個元素。通常,使用for迴圈遍歷陣列的長度,並將迴圈變數用作索引。
示例
#include <stdio.h> int main() { int a[] = {1,2,3,4,5}; int i; for (i=0; i<4; i++){ printf("a[%d]: %d \n", i, a[i]); } return 0; }
指標關係
陣列的名稱等效於指向其第一個元素的常量指標。這允許您在某些情況下互換使用陣列名稱和指標。
示例
#include <stdio.h> int main() { int num[10] = {50, 55, 67, 73, 45, 21, 39, 70, 49, 51}; printf("num[0]: %d Address of 0th element: %d\n", num[0], &num[0]); printf("Address of array: %d", num); return 0; }
輸出
num[0]: 50 Address of 0th element: 6422000 Address of array: 6422000
下界和上界
陣列中的每個元素都由一個從0開始的索引標識。陣列的下界是其第一個元素的索引,始終為0。陣列的最後一個元素的索引為陣列大小減1。
示例
#include <stdio.h> int main() { int num[10] = {50, 55, 67, 73, 45, 21, 39, 70, 49, 51}; int size = sizeof(num) / sizeof(int); printf("element at lower bound num[0]: %d at upper bound: %d Size of array: %d", num[0], num[size-1], size); return 0; }
輸出
element at lower bound num[0]: 50 at upper bound: 51 Size of array: 10
多維陣列
如果陣列宣告時方括號中只有一個大小值,則稱為一維陣列。在一維陣列中,每個元素都由其索引或下標標識。在C語言中,您可以宣告多個索引來模擬二維、三維或多維陣列。
示例
例如,以下是二維陣列的示例:
int a[3][3] = { {1, 2, 3}, {11, 22, 33}, {111, 222, 333}};
您可以將一維陣列視為列表,將二維陣列視為表格或矩陣。理論上,陣列的維數沒有限制,但在實踐中,二維陣列用於電子表格、資料庫等的設計。
複雜資料結構的實現
我們可以在結構資料型別的構造中使用陣列來實現堆疊、連結串列和樹等資料結構。
示例
typedef struct stack { int top; int arr[10]; } Stack;
因此,陣列是程式設計師武器庫中的重要工具,因為它可以用於不同的應用程式。C語言中的陣列概念被許多後續的程式語言所實現,例如C++、C#、Java等。