2017年7月31日月曜日

Cの関数に多次元配列

 * 関数
static void hogeFunc(int y, int x, int arr[y][x])
{
    int i, j;

    printf("arr[%d][%d]\n", y, x);

    for (i = 0; i < y; i++)
    {
        for (j = 0; j < x; j++)
        {
            printf("%d ", arr[i][j]);
        }

        printf("\n");
    }

    printf("****\n");
}

 * 呼び出し
int arr[2][4] =
    {
        {
            1, 2, 3, 4,
        },
        {
            5, 6, 7, 8,
        },
    };
hogeFunc(sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]) / sizeof(arr[0][0]), arr);

 * 結果
arr[2][4]
1 2 3 4
5 6 7 8


C言語の引数に多次元配列を渡す - Qiita
BohYoh.com-C/C++ FAQ 2次元配列の要素数を取得するにはどうすればよいですか。

 関数呼び出しでsizeofが多くて面倒な気はする。あと呼び出し先関数でsizeofを使うとうまく動かない(配列じゃなくてポインタ扱い?)。
 この書き方はC99以降だそうだ。WSLのarm-none-eabi-gccの4.xだとgnu99を指定してコンパイルできる。
 組み込み界隈で本当に可変長の多次元配列が必用なのかという話は置いておいて。。。

0 件のコメント:

コメントを投稿