0

mainの外側と内側で配列をA[a][b]グローバルに宣言する場合は、との値を要求します。main()ab

scanf("Input values of a and b %d %d", &a,&b)

しかし、このaとbは他の関数定義で使用されているため、セグメンテーション違反が発生します

4

2 に答える 2

0

次元aおよびbの配列Aにスペースを割り当てるコードでは、次を使用します。

int (*A)[b] = malloc(a * sizeof *A);

bこれは、Aを要素(要素)の行(配列)へのポインターとして定義し、そのような行(つまり、オブジェクトの行、つまりオブジェクト)intにスペースを割り当てます。aab inta*b int

この配列を受け取りたい関数では、次のように関数を宣言します。

void foo(size_t a, size_t b, int (*A)[b])
{
    …
}

つまり、fooへのパラメーターは、サイズa、サイズb、およびb intオブジェクトの行へのポインターです。

次のような関数を呼び出します。

foo(a, b, A);

A通常の方法での要素を使用します。

…A[i][j]…
于 2013-02-18T20:47:49.790 に答える
0

あなたの質問はあまり明確ではありませんが、実行時にユーザーが次元を指定する配列が必要なようです。c でこれを行う最善の方法は、ポインターを malloc することです。

int* A = malloc(a*b*sizeof(int));

A は a*b 要素を含む配列を指すようになり、2 次元配列として表示できます。

于 2013-02-18T20:11:55.867 に答える