Go言語とC言語における多次元配列の違い

Go言語とC言語における多次元配列の違い

プログラミングにおいて、多次元配列はデータを構造化して管理するための重要な概念です。しかし、言語によって挙動が異なるため、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言語では初期化が行われず、不定値が入るため、デバッグ時に注意が必要です。また、配列全体を出力するにはループ処理を記述する必要があります。

これらの違いを理解することで、両言語での多次元配列の利用がより効果的になります。

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です