Comment allouer dynamicment un tableau à deux dimensions

Je voudrais faire un tableau à deux dimensions en C.

Par exemple, je crée une variable de type int nommée place comme ceci:

int *place; 

J’ai un jeu qui comporte des variables telles que des lignes et des colonnes. Je voudrais que ma variable place soit un tableau à deux dimensions, avec une allocation dynamic de ses lignes et de ses colonnes (pour la taille maximale du tableau), qui ressemblerait à ceci dans la déclaration “normale”:

 place[rows][columns]; 

mais je ne sais pas comment faire avec l’allocation dynamic.

Je le ferais comme ceci pour les tableaux unidimensionnels:

 place = (int*) malloc (levels * sizeof(int)); 

mais je ne sais pas comment faire cela avec des tableaux 2D.

Modifier:

Comment puis-je réécrire ceci pour char au lieu de int?

J’ai essayé d’écraser simplement les caractères avec des caractères, mais cela ne fonctionne pas.

Soit place un pointeur sur les tableaux,

 int (*place)[columns] = malloc(rows * sizeof *place); 

Cela vous donne un bloc de mémoire contigu (bon pour la localité) auquel vous pouvez simplement accéder avec

 place[i][j] = whatever; 

Vous pouvez utiliser un seul tableau 1d en tant que tableau 2d en procédant à une indexation intelligente:

Allouer de la mémoire:

 place = (int*) malloc(rows * columns * sizeof(int)); 

Pour accéder à la place[i][j] , utilisez i et j comme:

 place[ i*columns + j] = value ; 

Vous devez procéder comme suit pour allouer dynamicment arr [x] [y] de type int:

  int i = 0; int **arr = (int**)calloc(x, sizeof(int*)); for(i = 0; i < x; i++) arr[i] = (int *) calloc(y, sizeof(int)); 

L'idée est de créer tout d'abord un tableau de pointeurs à une dimension, puis, pour chaque entrée de tableau, de créer un autre tableau à une dimension.