私はC言語とデータ構造を研究しています。静的配列パラメータを使用する関数のパラメータとして動的配列を使用できない理由について、詳細な説明をしたいと思います。静的配列パラメータを使用する関数のパラメータとして動的配列を使用できないのはなぜですか?
#include <stdio.h>
int sumAry2D_f1(int ary[][3], int rows, int cols);
void freeAry2D(int **ary, int rows);
int main(void)
{
int ary2D[][3] = { {1, 2, 3}, {4, 5, 6} }; // static array
int r, c;
int **ary = (int**)malloc(sizeof(int*) * 2); // dynamic array
for (r = 0; r < 2; r++)
ary[r] = (int*)malloc(sizeof(int)*3);
for (r = 0; r < 2; r++)
for (c = 0; c < 3; c++)
ary[r][c] = r + c; // 0, 1, 2, 1, 2, 3
printf("sumAry2D_f1() %d\n", sumAry2D_f1(ary2D, 2, 3));
// why we can`t function like this?
// printf("sumAry2D_f1~3() %d\n", sumAry2D_f1(ary, 2, 3));
freeAry2D(ary, 2); // free function of dynamic array
return 0;
}
int sumAry2D_f1(int ary[][3], int rows, int cols)
{
int i, j, sum = 0;
for (i = 0; i < rows; i++)
for (j = 0; j < cols; j++)
sum += ary[i][j];
return sum;
}
void freeAry2D(int **ary, int rows)
{
int i;
for (i = 0; i < rows; i++)
free(ary[i]);
free(ary);
}
'int ary [] [3]'は 'int **'と一致しません。例えば、int [] [3](別名int(* ary)[3] ')は、[int [3]] [int [3]]を指します。 'int ** ary'は' [int *] [int *] ... 'を指します。 – BLUEPIXY
"主にコード"フィルタを通過するために迷惑メールを追加しないでください。 – Chris
あなたが悪いと私はごめんなさい。今日、スタックオーバーフローが発生しました。そのフレーズが私を恥ずかしくしました。 – Jeong