広告スペース

第18回 配列

C言語の配列の宣言・初期化・アクセス方法。メモリ配置も図解。

配列 ― 同じ型のデータをまとめて管理

インデックス(添字)は0から始まることに注意!
int a[5] = {10, 20, 30, 40, 50};
printf("%d\n", a[0]); // → 10
printf("%d\n", a[4]); // → 50

配列のメモリ配置

配列はメモリ上に連続して配置。セルをクリックして確認。
配列のセルをクリックすると詳細が表示されます。

ステップ実行 ― 配列とfor文

array_demo.c

変数の状態

変数名

配列メモリ

標準出力

 

2次元配列

行と列を持つ表形式のデータを扱うには2次元配列を使います。
型名 配列名[行数][列数]; で宣言します。

宣言と初期化

// 3行×4列の2次元配列
int matrix[3][4] = {
    {1,  2,  3,  4},   // 0行目
    {5,  6,  7,  8},   // 1行目
    {9, 10, 11, 12}    // 2行目
};

メモリ上の配置

2次元配列はメモリ上では1列に並んで格納されます(行優先)。
matrix[1][2] は「1行目の2列目」= 7 です。
1
2
3
4
5
6
7
8
9
10
11
12
青=0行目 緑=1行目(オレンジ=matrix[1][2]) 赤=2行目

二重ループで走査

for (int i = 0; i < 3; i++) {        // 行
    for (int j = 0; j < 4; j++) {    // 列
        printf("%3d", matrix[i][j]);
    }
    printf("\n");
}
九九の表行列計算は2次元配列の典型的な応用例です。
関数に渡すときは void func(int m[][4], int rows) のように列数を指定する必要があります。

自分で書いてみよう ― 配列

my_array.c
出力
「実行」を押してください...
広告スペース

関連する講座

繰り返し・配列・文字列
第17回 乱数の生成
C言語のrand()とsrand()の使い方。乱数の範囲指定・シード・応用例を図解で解説。
繰り返し・配列・文字列
第14回 繰り返し(for/while)
C言語のfor文とwhile文の使い方。ループ処理を図解で解説。
繰り返し・配列・文字列
第19回 文字列
C言語の文字列(char配列)の扱い方。strcpy, strlen, strcmp等の文字列関数。
関数編
第24回 配列を引数に
C言語で関数に配列を渡す方法。ポインタとの関係も解説。
← 前の講座
第17回 乱数の生成
次の講座 →
第19回 文字列

確認クイズ

この講座の理解度をチェックしましょう!

Q1. int a[5]; で確保される要素数は?

4個
5個
6個

a[5] は a[0]〜a[4] の5個の要素を持つ配列です。

Q2. 配列のインデックスは何番から始まる?

0
1
任意

C言語の配列インデックスは常に 0 から始まります。a[5] なら a[0] が最初の要素です。

Q3. int a[3] = {1, 2}; のとき a[2] の値は?

未定義
0
2

部分的に初期化した場合、残りの要素は 0 で初期化されます。a[2] は 0 です。

この記事をシェア
X(Twitter)でシェア Facebookでシェア LINEで送る はてブ

この講座の理解を深めるおすすめ書籍

サイトで動きを理解し、書籍で演習量を補うと効果的です

📘
苦しんで覚えるC言語
MMGames 著
初心者向けの定番入門書。丁寧な解説で基礎を固められます。
Amazonで見る
📗
新・明解C言語 入門編
柴田望洋 著
図解が豊富で、演習問題も充実。大学の教科書としても採用多数。
Amazonで見る
📙
プログラミング言語C 第2版
B.W.カーニハン, D.M.リッチー 著
通称K&R。C言語の原典。基礎を終えた後のステップアップに最適。
Amazonで見る

※ 上記リンクはアフィリエイトリンクです。購入によりサイト運営を支援いただけます。