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

C語言二維陣列初始化:不完全初始化規則與元素值計算

     編輯:C 語言問答

C 語言二維陣列初始化規則詳解

題目

若定義 int a[3][4] = {{1,2},{0},{4,6,8,10}};,初始化後 a[1][1] 與 a[2][2] 的值為何?

答案

  • a[1][1] = 0
  • a[2][2] = 8

記憶體佈局逐步推演

二維陣列在記憶體中以列優先 連續儲存:a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] ...

初始化列表對應

初始化列表:  {{1,2},      {0},         {4,6,8,10}}
行索引:        行 0        行 1         行 2
列數:          2 個        1 個         4 個 (滿 4 列)
補零規則:      後 2 列=0   後 3 列=0    無需補零

完整陣列內容

col 0col 1col 2col 3
row 01200
row 10000
row 246810

核心規則

  1. 按行順序依序填入初始化值
  2. 每行提供的值不足時,剩餘元素自動補 0
  3. 整體提供的值不足總元素數 (3×4=12) 時,剩餘元素自動補 0
  4. 若完全省略初始化列表 int a[3][4] = {0}; 或 int a[3][4] = {}; (C23),全陣列歸零

程式驗證

#include <stdio.h>

int main() {
    int a[3][4] = {{1,2},{0},{4,6,8,10}};
    printf("a[1][1] = %d\n", a[1][1]);  // 輸出 0
    printf("a[2][2] = %d\n", a[2][2]);  // 輸出 8
    // 列印全陣列
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 4; j++) {
            printf("%3d", a[i][j]);
        }
        printf("\n");
    }
    return 0;
}

延伸:指標存取同一陣列

int (*p)[4] = a;  // 指向 4 個 int 的陣列指標
printf("%d\n", *(*(p+1)+1));  // 等價 a[1][1] → 0
printf("%d\n", *(*(p+2)+2));  // 等價 a[2][2] → 8
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved