プログラミングにおいて、多次元配列はデータを構造化して管理するための重要な概念です。しかし、言語によって挙動が異なるため、Go言語とC言語の違いを理解しておくことが重要です。この記事では、両者の多次元配列の挙動を比較し、その違いを整理します。
Go言語の多次元配列
宣言と初期化
Go言語では、多次元配列は以下のように宣言します:
var arr [2][3]int
- 外側の配列(行数)が
2
。 - 内側の配列(列数)が
3
。
この配列の構造は以下のようになります:
[0 0 0] // arr[0]
[0 0 0] // arr[1]
初期値
Go言語では、すべての配列要素は**デフォルト値(ゼロ値)**で初期化されます。具体的には、int
型の場合、すべての要素が 0
になります。
実行例
package main
import "fmt"
func main() {
var arr [2][3]int
fmt.Println(arr)
}
出力結果
[[0 0 0] [0 0 0]]
fmt.Println
を使うことで配列全体を一括して出力できます。
C言語の多次元配列
宣言と初期化
C言語での多次元配列の宣言は次のようになります:
int arr[2][3];
- 外側の配列(行数)が
2
。 - 内側の配列(列数)が
3
。
この配列の構造は以下のようになります:
arr[0][0] arr[0][1] arr[0][2]
arr[1][0] arr[1][1] arr[1][2]
初期値
C言語では、**自動変数(ローカル変数)として定義された配列は初期化されません。そのため、配列の要素には未定義の値(ゴミ値)**が入ります。
実行例
#include <stdio.h>
int main() {
int arr[2][3];
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
出力結果(例)
-1073741824 0 4196352
4196352 0 0
出力は環境や実行タイミングによって異なりますが、これが「未定義の値」であることを示しています。
明示的な初期化
C言語では、配列を明示的に初期化することができます:
int arr[2][3] = {0}; // 全要素を0に初期化
結果
0 0 0
0 0 0
Go言語とC言語の違い
以下は、Go言語とC言語の多次元配列における主要な違いを整理した表です:
特徴 | Go言語 | C言語 |
---|---|---|
配列の初期値 | ゼロ値で初期化 | 未定義の値(ゴミ値) |
配列全体の出力 | fmt.Println で一括出力可能 | ループを使用して出力が必要 |
メモリ配置 | 連続したメモリ配置 | 同じ |
宣言時の利便性 | 初期化が不要 | 初期化が必要 |
まとめ
Go言語とC言語の多次元配列の最大の違いは、初期化の挙動と出力の簡便さにあります。
- Go言語はゼロ値で初期化されるため、初期化の手間が不要で、
fmt.Println
による簡単なデバッグが可能です。 - 一方、C言語では初期化が行われず、不定値が入るため、デバッグ時に注意が必要です。また、配列全体を出力するにはループ処理を記述する必要があります。
これらの違いを理解することで、両言語での多次元配列の利用がより効果的になります。
コメントを残す