関数に 2 次元配列を渡そうとしています。関数に渡すのに問題はありません。しかし、この背後にあるロジックを理解するのに苦労しています。関数と主な定義は次のようになります。
// Function to print the two-dimensional array
void print(int x, int y, int a[x][y]){
printf("\n");
int i, j;
for(i = 0; i < x; i++){
for(j = 0; j < y; j++)
printf("%d ", a[i][j]);
printf("\n");
}
}
// Function to initialize the two-dimensional array
void init_2d(int *a, int x, int y){
int i, j;
for(i = 0; i < x; i++){
for(j = 0; j < y; j++){
a[i*y + j] = i + j;
}
printf("\n");
}
}
int main(){
int m = 2, n = 3;
int a[m][n]; // a two dimensional whose size has been defined using m and n
init_2d(a, m, n);
print(m, n, a);
}
皮肉なことに、すべてが正常に機能しています。私はその論理を消化できないので、それは私の問題です。
主な問題は次のとおりです。
- 私が本で読んだのは、2 次元配列のサイズは定数または記号定数を使用して定義する必要があるということでした。私のメインでは、変数
m
を使用して 2 次元配列を定義していますがn
、それでも問題なく動作します。なんで? - また、2 次元配列を (関数内で int へのポインターとして定義することによって) 1 次元配列に分解して渡すように言われました。つまり、 function で行った方法です
init_2d
。しかし、関数では、変数とprint
を使用してサイズが定義された 2 次元配列を使用して実行しています。そうしてもいいですか?x
y
- ポインターへのポインターを使用して 2 次元配列をトラバースすることもできますか?
私のすべての概念をクリアできる、このトピックに関する良い読み物を誰かに提案してもらえますか?
コードブロックを使用してコードをコンパイルしていますが、コンパイラはGNU GCC Compilerです。