Creer tableau multidim. en c par pointeur ??
Fermé
le.pacte.des.fous
-
14 févr. 2007 à 12:07
jro-daemon Messages postés 10 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 24 février 2007 - 14 févr. 2007 à 15:00
jro-daemon Messages postés 10 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 24 février 2007 - 14 févr. 2007 à 15:00
A voir également:
- Creer tableau multidim. en c par pointeur ??
- Tableau croisé dynamique - Guide
- Créer un compte gmail - Guide
- Créer un compte google - Guide
- Comment créer un groupe whatsapp - Guide
- Tableau ascii - Guide
1 réponse
jro-daemon
Messages postés
10
Date d'inscription
mardi 13 février 2007
Statut
Membre
Dernière intervention
24 février 2007
1
14 févr. 2007 à 15:00
14 févr. 2007 à 15:00
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