mainの外側と内側で配列をA[a][b]
グローバルに宣言する場合は、との値を要求します。main()
a
b
scanf("Input values of a and b %d %d", &a,&b)
しかし、このaとbは他の関数定義で使用されているため、セグメンテーション違反が発生します
次元aおよびbの配列Aにスペースを割り当てるコードでは、次を使用します。
int (*A)[b] = malloc(a * sizeof *A);
b
これは、Aを要素(要素)の行(配列)へのポインターとして定義し、そのような行(つまり、オブジェクトの行、つまりオブジェクト)int
にスペースを割り当てます。a
a
b
int
a*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]…
あなたの質問はあまり明確ではありませんが、実行時にユーザーが次元を指定する配列が必要なようです。c でこれを行う最善の方法は、ポインターを malloc することです。
int* A = malloc(a*b*sizeof(int));
A は a*b 要素を含む配列を指すようになり、2 次元配列として表示できます。