Allocation d’un tableau 2D en C

Je veux allouer un tableau 2-D en C au moment de l’exécution. Maintenant, ceci peut être réalisé de manière conventionnelle comme ceci:

int *masortingx[rows] for (row = 0; row < rows; ++row) { matrix[row] = (int *)malloc(ncol*sizeof(int)); } 

Mais j’ai trouvé une autre méthode, qui fait la même chose:

 int (*p)[rows]; p=(int (*)[rows])malloc(rows*cols*sizeof(int)); 

Quelqu’un peut-il expliquer le fonctionnement de la 2ème déclaration? Plus précisément, qu’entend-on par (int (*)[rows])malloc ? À ma connaissance, malloc est utilisé comme (int *)malloc(ncol*sizeof(int)) ou (char *)malloc(ncol*sizeof(char)) .

Ici, vous malloc la valeur malloc par malloc pointeur de type pour mettre en rangée des rows d’ int .

En passant, en C, la conversion d’un pointeur à void en un pointeur à object n’est pas requirejse, et même inutile. Vous ne devriez pas vous soucier de ces détails. Le code suivant fonctionne bien aussi.

 #include  int (*p)[rows]; p = malloc(rows * cols * sizeof(int)); 

Ceux-ci ne sont pas équivalents, le premier alloue un tableau de pointeurs aux entiers, le second alloue un tableau d’entiers et renvoie un pointeur sur celui-ci.

Une version plus simple si vous n’avez pas besoin du tableau après la fin de la fonction serait:

  int masortingx[rows][cols];