-1

関数を使用して C で静的配列 (2D 配列) を出力したいだけです。コンパイラとして gcc を使用しています。コードを実行しようとすると、セグ フォールトが発生し、その理由がわかりません。

#include <stdio.h>

void print_out_an_array(int n, int m, int tab[n][m])
{
    int i,j;
    for(i=0; i<n; i++)
        for(j=0; j<m; j++)
            printf("tab[%d][%d] = %d\n", i, j, tab[i][j]);
}

int main(int argc, char **argv)
{
    int tab[2][4] = {{1,2,3,4}, {5,6,7,8}};
    print_out_an_array(tab, 2, 4);

    return 0;
}
4

3 に答える 3

3

関数呼び出しと関数定義が一致しません

関数呼び出し
print_out_an_array(tab, 2, 4); ですが、関数定義では最初の引数はint
void print_out_an_array(int n, int m, int tab[n][m])

次のように、引数を同じにします。

関数呼び出しを
「print_out_an_array(2, 4, tab);」に変更

更新このコードが機能することを
確認してください

また、参照Cとしてこれを読んで、2次元配列を渡します

于 2013-11-14T19:28:08.497 に答える
3

関数定義では、最初のパラメーターはinttype ですが、最初の引数を として関数を呼び出していますint **。関数呼び出しを次のように変更します

print_out_an_array(2, 4, tab);  

あなたのコメントの質問について:

わかりましたが、このコードはどうですか: http://ideone.com/Z4mHkbなぜエラーになるのですか?

関数パラメータ**tabtab[n][m]は同等ではありません。コンパイラは、tab [m][n]関数パラメータとして見て、次のように解釈します

void fun(int (*)[m]tab, int n, int m)

つまり、整数tabの配列へのポインタとして解釈されます。mを見ている間 int **tab、単に整数へのポインタ(または へのポインタ ( )の配列) へtabのポインタとして解釈します。int *tab[]int

于 2013-11-14T19:29:38.143 に答える