Ich studiere die C-Sprache und Datenstrukturen. Ich möchte einige detaillierte Erklärungen darüber erhalten, warum wir dynamische Arrays nicht als Parameter von Funktionen verwenden können, die statische Array-Parameter verwenden. Warum können wir dynamische Arrays nicht als Parameter von Funktionen verwenden, die statische Array-Parameter verwenden?
#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]' stimmt nicht mit 'int **' überein. ZB "int ary [] [3]" (aka 'int (* ary) [3]') zeigt auf '[int [3]] [int [3]] ...'. 'int ** ary 'zeigt auf' [int *] [int *] ... '. – BLUEPIXY
Bitte fügen Sie keinen Junk-Text hinzu, um den "mostly code" -Filter zu umgehen. – Chris
Es tut mir leid, wenn Sie sich schlecht gefühlt haben. Heute stoße ich zuerst auf Stack Overflow und der Satz hat mich in Verlegenheit gebracht. – Jeong