Creer tableau multidim. en c par pointeur ??

le.pacte.des.fous -  
jro-daemon Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   -
comment creer un tableau multidimensionnel a partir de pointeurs ??
A voir également:

1 réponse

jro-daemon Messages postés 10 Date d'inscription   Statut Membre Dernière intervention   1
 
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:
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
0