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
comment creer un tableau multidimensionnel a partir de pointeurs ??
A voir également:

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