J'étudie le langage C et les structures de données. Je souhaite obtenir des explications détaillées sur la raison pour laquelle nous ne pouvons pas utiliser des tableaux dynamiques en tant que paramètres de fonctions utilisant des paramètres de tableau statique.Pourquoi ne pouvons-nous pas utiliser des tableaux dynamiques en tant que paramètres de fonctions utilisant des paramètres de tableaux statiques?
#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]' ne correspond pas à 'int **'. E.g 'int ary [] [3]' (alias 'int (* ary) [3]') pointe sur '[int [3]] [int [3]] ...'. 'int ** ary' pointe sur' [int *] [int *] ... '. – BLUEPIXY
Veuillez ne pas ajouter de texte indésirable pour passer le filtre "code principalement". – Chris
Je suis désolé si vous vous sentiez mal. Aujourd'hui, je rencontre Stack Overflow au début et la phrase m'a embarrassé. – Jeong