A voir également:
- Creer tableau multidim. en c par pointeur ??
- Tableau word - Guide
- Comment créer un groupe whatsapp - Guide
- Créer un compte google - Guide
- Tableau ascii - Guide
- Créer un lien pour partager des photos - Guide
1 réponse
Salut,
Pour créer un tableau multidimensionnel à partir de pointeurs, il suffit d'avoir un pointeur qui pointe vers autant de zones mémoires que de dimensions. Je vais détailler avec un exemple.
Si par exemple, tu veux déclarer une matrice d'entiers avec un pointeur, on déclare:
Ici p est un pointeur vers un pointeur d'entiers et l'adresse de ton tableau bidimensionnel. Maintenant que tu l'as déclaré, il faut
allouer à p les zones là ou il va exister en mémoire.
Voici un exemple d'un tableau à deux dimensions que j'utilise comme matrice:
Comme tu pourras le voir, après avoir initialisé mon pointeur matrix avec la fonction allocation_dynamique, je peux la remplir avec les éléments du type que du veux.
J'espère que ça pourra t'aider.
Cordialement,
Johnny
Pour créer un tableau multidimensionnel à partir de pointeurs, il suffit d'avoir un pointeur qui pointe vers autant de zones mémoires que de dimensions. Je vais détailler avec un exemple.
Si par exemple, tu veux déclarer une matrice d'entiers avec un pointeur, on déclare:
int** p;
Ici p est un pointeur vers un pointeur d'entiers et l'adresse de ton tableau bidimensionnel. Maintenant que tu l'as déclaré, il faut
allouer à p les zones là ou il va exister en mémoire.
Voici un exemple d'un tableau à deux dimensions que j'utilise comme matrice:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> /*Dimensions du tableau*/ #define LINE 2 #define ROW 3 #define DEBUGP printf("[DEBUG] File: %s: line %i fonction :%s\n",__FILE__,__LINE__,__FUNCTION__) static int** allocation_dynamique(int line,int row) { int i; //Variables de boucle int** p; p = (int**) calloc(line,sizeof(int*)); if (p == NULL) { fprintf(stderr,"[ERROR]Alloc impossible"); exit(EXIT_FAILURE); } { for (i=0;i<line;i++) { *(p+i) = (int*) calloc(row,sizeof(int)); if ( p[i] == NULL) { fprintf(stderr,"[ERROR]Alloc impossible"); exit(EXIT_FAILURE); } } } return p; } static void affiche_ligne(int** matrix,int ligne) { int i; for(i=0;i<ROW;i++) fprintf(stdout,"matrix[%i][%i] : %i\t",ligne,i,matrix[ligne][i]); printf("\n"); } int main(void) { static int** matrix; int i,j; matrix = allocation_dynamique(LINE,ROW); /*Initialisation de la matrice*/ for(i=0;i < LINE;i++) { for(j=0;j<ROW;j++) matrix[i][j] = 0; } /*Initialiser la première ligne à 2*/ for (j=0;j<ROW;j++) matrix[0][j] = 2; affiche_ligne(matrix,0); affiche_ligne(matrix,1); return 0; }
Comme tu pourras le voir, après avoir initialisé mon pointeur matrix avec la fonction allocation_dynamique, je peux la remplir avec les éléments du type que du veux.
J'espère que ça pourra t'aider.
Cordialement,
Johnny