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];