|
|
|
|
[C] Pointeur vers tableau Multidimensionnel
Dernière réponse le 20 jun 2005 à 10:44:30 kilian, le 19 jun 2005 à 02:46:26Bonjour j'ai un soucis avec les pointeurs....
Quand je déclare une chaine de caractères en tableau multidimensionnel, je n'arriave pas à faire pointer une variable sur l'ensemble de ce tableau.
Par exemple:
void truc(){
char **p_our_char; // pointeur vers tableau multidimensionnel
char our_char[10][20]; //le tableau multidimensionnel
strcpy(our_char[0],"CHAINE"); //Affectation d'une première chaine
p_our_char=our_char; // C'est ici qu'arrive l'erreur
printf("%s\n",p_our_char[0]);
}
Voici l'erreur que Gcc me renvoie:
attention : affectation d'un type pointeur incompatible
Pourtant c'est comme ça que fonctionne argv, il pointe vers un tableau multidimensionnel de chaine... Donc c'est un pointeur vers un pointeur. (D'ailleurs je viens d'essayer de faire pointer p_our_char vers argv et ça marche très bien)....
Je ne comprends pas bien pourquoi ça ne marche pas avec mon tableau.....
....Merci....
Configuration: Debian Gcc 3.3.5
Bonjour kilian,
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
main()
{
char **p_our_char;
char our_char[10][20];
strcpy(our_char[0],"CHAINE0");
strcpy(our_char[1],"CHAINE1");
p_our_char=malloc(sizeof( char *));
*p_our_char=our_char[0];
*(p_our_char+1)=our_char[1];
printf("%s\n",*p_our_char);
printf("%s\n",*(p_our_char+1));
}
char **p_our_char p_our_char est l'adresse du 1er élément, donc l'adresse de pointeur de caractère *p_our_char est le contenu du 1er élément, donc un pointeur de caractère **p_our_char est la donnée pointée par le 1er élément, donc un caractère. Contrairement à un tableau où les cases sont allouées statiquement à la déclaration, un pointeur de pointeur n'alloue aucun espace. Donc toujours malloc() pour créer ce qui peut être une colonne de pointeurs. l'access au 1er pointeur se note *p_our_char l'access au 2ème pointeur se note *(p_our_char +1)
|
Salut killian, our_char n'est pas un pointeur et p_our_char est un pointeur donc l'affectation est incompatible. En fait ton p_our_char est un pointeur vers un tableau de pointeurs. Alors qe our_hcar est un tableau de tableau, ce n'est pas implémenté de la meme maniére et tu risques de ne pas avoir ce qe tu veux. En fait lorsqe tu vas faire p_our_char[i] est un pointeur alors qe our_char[i] est un ensemble contigu de valaurs. Je ne sais pas si j'ai été clair.
tafiscobar "lou waye def bopame"
|
Répondre à Latifah
|
A) RAPPELS : ALLOCATION MEMOIRE
int matrice[5][5]; //alloue une matrice de manière statique
//allouer une matrice 2d dynamiquement
int **matrice2d=(int**)malloc(sizeof(int*)*nb_ligne);
for(unsigned int i=0;i<nb_ligne;i++){
matrice2d[i]=(int*)malloc(sizeof(int)*nb_colonne);
}
//allouer une matrice 23d dynamiquement
int ***matrice3d=(int***)malloc(sizeof(int**)*nb_couche);
for(unsigned int j=0;i<nb_couche;i++){
matrice2[j]=(int**)malloc(sizeof(int*)*nb_ligne);
for(unsigned int i=0;i<nb_ligne;i++){
matrice2[j][i]=(int*)malloc(sizeof(int)*nb_colonne);
}
}
//détruire une matrice 2d
for(unsigned int i=0;i<nb_ligne;i++){
free(matrice2d[i]);
}
free(matrice2d);
//...pour la matrice 3d je te laisse deviner ;o)
//initialiser matrice3d[i][j][k]
matrice3d[i][j][k]=2;
Après à toi de définir les opérateurs que tu veux (produits, tranposéee que sais je..;)) Bonne chance |

