首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言陣列元素表示與初始化賦值深度解析

     編輯:關於C語言

陣列元素的表示與存取

陣列元素是構成陣列的基本單位,本質上是變數。其表示格式為:陣列名[下標],其中下標僅能為整數常數或整數運算式(浮點數會自動截斷取整)。

下標變數特性

  • 別稱下標變數,型態即陣列元素型態
  • 必須先宣告陣列才能使用下標變數
  • C 語言不支援整體陣列操作,輸入/輸出/指派皆需逐元素透過迴圈處理
// 正確:逐元素輸出
for (i = 0; i < 10; i++) printf("%d", a[i]);

// 錯誤:嘗試整體輸出
printf("%d", a);  // 編譯錯誤

下標運算式靈活性示範

void main() {
    int i, a[10];
    for (i = 0; i < 10; i++)
        a[i++] = 2 * i + 1;  // 下標使用 i++ 運算式
    for (i = 9; i >= 0; i--)
        printf("%d", a[i]);  // 逆序輸出奇數
    printf("\n%d %d\n", a[5.2], a[5.8]);  // 下標非整數自動取整,皆輸出 a[5]
}

程式展示:下標可為運算式(i++)、浮點數自動截斷(5.2 → 5、5.8 → 5)。

陣列賦值三大方式

1. 初始化賦值(靜態、編譯階段)

語法:static 型態 陣列名[常數運算式] = {值, 值...};
限制:僅靜態儲存類別(static、外部)陣列可初始化。

初始化規則詳解

  1. 部分初始化:提供值少於元素數時,前段元素獲指定值,剩餘自動補 0
    static int a[10] = {0,1,2,3,4}; → a[0]~a[4] 為 0~4,a[5]~a[9] 為 0
  2. 僅支援逐元素指定,不可整體指派
    static int a[10] = {1,1,1,1,1,1,1,1,1,1}; ✓
    static int a[10] = 1; ✗
  3. 未初始化靜態陣列:所有元素預設為 0
  4. 完全初始化可省略長度:static int a[] = {1,2,3,4,5}; 自動推斷長度為 5

2. 動態賦值(執行階段,scanf 配合迴圈)

void main() {
    int i, max, a[10];
    printf("input 10 numbers:\n");
    for (i = 0; i < 10; i++)
        scanf("%d", &a[i]);  // 逐元素輸入
    max = a[0];
    for (i = 1; i < 10; i++)
        if (a[i] > max) max = a[i];
    printf("maximum=%d\n", max);
}

演算法:先假設首元素為最大值,逐一比較更新。

3. 排序演算法實作(選擇排序法)

void main() {
    int i, j, p, q, s, a[10];
    printf("\n input 10 numbers:\n");
    for (i = 0; i < 10; i++)
        scanf("%d", &a[i]);

    for (i = 0; i < 10; i++) {
        p = i; q = a[i];  // 記錄目前位置與值
        for (j = i + 1; j < 10; j++)  // 尋找剩餘最大值
            if (q < a[j]) { p = j; q = a[j]; }
        if (i != p) {  // 需交換
            s = a[i];
            a[i] = a[p];
            a[p] = s;
        }
        printf("%d", a[i]);  // 輸出已排序元素
    }
}

邏輯解析:外層迴圈決定第 i 位置的最終值;內層在 i+1~9 尋找最大值及其索引 p;若 p ≠ i 則交換。單層迴圈完成輸入、排序、輸出三合一。

重點總結

  • 陣列元素 = 下標變數,僅支援逐元素操作
  • 下標自動取整特性可用於特定演算法
  • 初始化賦值屬編譯期靜態綁定,效率最高
  • 動態賦值需配合迴圈與輸入函數
  • 排序演算法核心:雙重迴圈 + 比較交換
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved