C言語の2次元配列とは?基本構文から初期化・実用例まで徹底解説
配列(アレイ)とは、関連性のある複数のデータを、共通の名前を使ってひとまとめに格納できるデータ構造です。同じ型の値を連続的に扱いたい場合に非常に便利で、C言語プログラミングの基礎となる重要な概念です。
配列の宣言構文
配列を宣言する際の基本的な構文は以下の通りです。
データ型 配列名 [サイズ];
配列の種類
C言語の配列は、大きく分けて以下の3種類に分類されます。
- 1次元配列
- 2次元配列
- 多次元配列
初期化の方法
配列の初期化には、主に次の2つの方法があります。
- コンパイル時初期化(コード内であらかじめ値を設定)
- 実行時初期化(ユーザー入力などにより実行時に値を設定)
2次元配列とは
2次元配列は、表形式のデータを格納したい場合や、行列(マトリックス)を扱うアプリケーションなどで活用されます。行と列の2つのインデックスを持つことで、縦横の格子状にデータを配置できます。
宣言の構文
データ型 配列名 [行サイズ] [列サイズ];
記述例: int a[5][5];
たとえば a[3][3] の配列には、次のように行と列を指定してアクセスします。
| a[0][0] 10 | a[0][1] 20 | a[0][2] 30 |
| a[1][0] 40 | a[1][1] 50 | a[1][2] 60 |
| a[2][0] | a[2][1] | a[2][2] |
コンパイル時初期化のサンプルプログラム
以下は、宣言と同時に初期値を代入する「コンパイル時初期化」のC言語プログラムです。
#include<stdio.h>
main ( ){
int a[3][3] = {10,20,30,40,50,60,70,80,90};
int i,j;
printf ("elements of the array are");
for ( i=0; i<3; i++){
for (j=0;j<3; j++){
printf("%d \t", a[i] [j]);
}
printf("\n");
}
}実行結果
elements of the array are: 10 20 30 40 50 60 70 80 90
実行時初期化のサンプルプログラム
続いて、ユーザーからの入力を受け取って配列に値を格納する「実行時初期化」のプログラムです。scanf関数を使って各要素に値を読み込んでいます。
#include<stdio.h>
main ( ){
int a[3][3] ,i,j;
printf ("enter elements of array");
for ( i=0; i<3; i++){
for (j=0;j<3; j++){
scanf("%d", &a[i] [j]);
}
}
printf("elements of the array are");
for ( i=0; i<3; i++){
for (j=0;j<3; j++){
printf("%d\t", a[i] [j]);
}
printf("\n");
}
}実行結果
Enter elements of array : 1 2 3 4 5 6 7 8 9 Elements of the array are 1 2 3 4 5 6 7 8 9
応用例:2つの配列の和と積を求めるプログラム
最後に、実行時に入力した2つの2次元配列A・Bについて、全要素の和(加算)と積(乗算)を計算して出力するプログラムを紹介します。二重ループを組み合わせることで、各要素ごとの演算を効率的に処理できます。
#include<stdio.h>
void main(){
//配列の宣言(実行時初期化)//
int A[2][3],B[2][3],i,j,sum[i][j],product[i][j];
//forループで配列AとBに要素を読み込む//
printf("Enter elements into the array A: \n");
for(i=0;i<2;i++){
for(j=0;j<3;j++){
printf("A[%d][%d] :",i,j);
scanf("%d",&A[i][j]);
}
printf("\n");
}
for(i=0;i<2;i++){
for(j=0;j<3;j++){
printf("B[%d][%d] :",i,j);
scanf("%d",&B[i][j]);
}
printf("\n");
}
//和を計算して出力//
printf("Sum array is : \n");
for(i=0;i<2;i++){
for(j=0;j<3;j++){
sum[i][j]=A[i][j]+B[i][j];
printf("%d\t",sum[i][j]);
}
printf("\n");
}
//積を計算して出力//
printf("Product array is : \n");
for(i=0;i<2;i++){
for(j=0;j<3;j++){
product[i][j]=A[i][j]*B[i][j];
printf("%d\t",product[i][j]);
}
printf("\n");
}
}実行結果
Enter elements into the array A: A[0][0] :2 A[0][1] :3 A[0][2] :1 A[1][0] :2 A[1][1] :4 A[1][2] :5 B[0][0] :1 B[0][1] :2 B[0][2] :3 B[1][0] :5 B[1][1] :6 B[1][2] :7 Sum array is : 3 5 4 7 10 12 Product array is : 2 6 3 10 24 35
まとめ
C言語の2次元配列は、「行」と「列」の2つのインデックスでデータを管理できる強力なデータ構造です。表形式のデータ処理や行列演算など、実務でも幅広く活用されています。コンパイル時初期化と実行時初期化の2つの方法を理解し、二重ループと組み合わせて自在に操作できるようになりましょう。
-
C言語のインライン関数とは?仕組みと基本構文をわかりやすく解説
インライン関数(inline function)とは、関数を呼び出している箇所に関数本体のコードを直接展開できるようにした関数のことです。これにより、関数呼び出しにかかるオーバーヘッドを削減できます。なお、実際にコードを展開するかどうかは、常にコンパイラが判断します。インライン関数では、関数呼び出しが実際のプログラムコードに置き換えられます。インライン関数は主に小規模な計算に使用されます。大規模な処理には適していません。インライン関数は通常の関数とほぼ同じですが、関数名の前に「inline」キーワードを付ける点だけが異なります。インライン関数の基本構文インライン関数は、以下の構文で定義します。
-
C言語入門:ポインタと2次元配列の仕組みをわかりやすく解説
ポインタとは、別の変数のアドレス(メモリ上の場所)を格納するための特殊な変数です。C言語において、ポインタはメモリを直接操作できる強力な機能として、効率的なプログラミングに欠かせない存在となっています。 ポインタの主な特徴 ポインタを使うことで、メモリ領域を節約できます。 メモリ上の位置へ直接アクセスできるため、実行速度が速くなります。 ポインタを利用すると、メモリの動的な割り当てと解放が可能になり、メモリを効率的に管理できます。 リンクリストやツリーなどのデータ構造と組み合わせて使われます。 ポインタと2次元配列の関係 2次元配列は、メモリ上には行ごとに連続した形で配置されます。例えば、