Pourquoi est-il nécessaire de passer le nombre de colonnes comme argument de fonction?

Lorsque je passe une masortingce dans les parameters de la fonction, à l’aide de crochets, j’ai également besoin de transmettre le nombre de colonnes. Pourquoi?

#include  //int function(int masortingx[][5]){ //Will work int function(int masortingx[][]){ //Won't work return masortingx[0][0]; } int main(){ int masortingx[5][5]; masortingx[0][0] = 42; printf("%d", function(masortingx)); } 

erreur gcc:

 prog.c:3:18: error: array type has incomplete element type int function(int masortingx[][]){ ^ prog.c: In function 'main': prog.c:10:5: error: type of formal parameter 1 is incomplete printf("%d", function(masortingx)); ^ prog.c:7: confused by earlier errors, bailing out 

Merci

    En mémoire, les informations seront affichées de manière contiguë. Si vous ne fournissez que la première dimension, il est impossible de déterminer l’emplacement de l’int que vous demandez. si votre masortingce est

      1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 

    En mémoire, il apparaît toujours comme:

     1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 

    si je sais que la deuxième dimension a 5 int s, alors la masortingx[2][1] est à l’adresse masortingx + (2 * 5) + 1 , je dois entrer par 5 colonnes, deux fois, pour atteindre la troisième ligne, puis un élément de plus dans cette ligne pour obtenir la colonne. Sans la taille de la deuxième dimension, je n’ai aucun moyen de savoir où les valeurs apparaîtront en mémoire. (dans ce cas, “I” signifie le compilateur / runtime)