IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

allocation dynamique avec double pointeur ou non


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 17
    Points : 13
    Points
    13
    Par défaut allocation dynamique avec double pointeur ou non
    Bonsoir,

    Je cherche depuis quelques heures une solutions à mon problème :

    je souhaite déclarer dans une fonction main par exemple un char* que j'initialise a NULL, ensuite je souhaite le passer a une fonction par adresse (pointeur) qui me permettra de lui allouer dynamiquement de la mémoire avec le fameux malloc pour au final avoir un tableau de char dans mon main => une chaine de caractère.

    J'ai donc essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #include <stdio.h>
    #include <stdlib.h>
    #include <regex.h>
    #include <string.h>
     
    void fonction( char **p){
    	*p = (char *) malloc (sizeof(char)*3);
     
    	*(p[0])= 'T';
    	*(p[1])= 'A';
     
     
    }
     
    int main( int argc, char* argv[]){
     
    	int i;
    	char* pointeur = NULL;
     
     
     
    	fonction(&pointeur);
     
    	for(i=0;i<3;i++){
    	printf("%c\n",pointeur[i]);
    	}
     
     
     
    	return EXIT_SUCCESS;
     
    }
    Evidement si je souhaite faire ceci c'est pour résoudre un problème que je rencontre dans un programme plus compliqué et non pas pour vous embêter

    Avis aux amateurs de C

    Bonne soirée !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Un petit problème de parenthèses :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (*p)[0] = 'T';
    (*p)[1] = 'A';

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    j'ai corrigé mais lorsque que j'affiche ma deuxieme valeur à la place d'un A j'obtient un symbole étrange, je ne comprend pas d'où vient le problème ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    void fonction( char **p){
    	*p = (char *) malloc (sizeof(char)*3);
     
    	*(p)[0] = 'T';
    	*(p)[1] = 'A';
    	*(p)[2] = '\0';
     
     
    }
     
    int main( int argc, char* argv[]){
     
    	int i;
    	char* pointeur = NULL;
     
     
     
    	fonction(&pointeur);
     
    	for(i=0;i<2;i++){
    	printf("%c\n",pointeur[i]);
    	}
     
     
     
    	return EXIT_SUCCESS;
     
    }

  4. #4
    Invité
    Invité(e)
    Par défaut
    Il va falloir apprendre à recopier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (*p)[0] = 'T';
    (*p)[1] = 'A';

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    autant pour moi !

    Mais je ne comprend pas vraiment cette expression :
    " (*p)[0] = 'T'; "

    c'est l'accès a la valeur que pointe un pointeur qui pointe un autre pointeur : mais pourquoi pas
    *p[0] ?

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 137
    Points
    23 137
    Par défaut
    tab[i] est équivalant à *(tab + i)

    Donc :
    (*p)[0] est équivalant à *( (*p)+0) soit le premier élément du "tableau" pointé par p.

    *p[0] est équivalent à *( *(p+0) ) soit l'élément pointé par le premier élément du "tableau" p

    A noter que p+i est un pointeur sur le ième élément suivant l'élément pointé par p.

    Je te conseille de prendre un crayon et une feuille et de dessiner la mémoire pour bien comprendre.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 17
    Points : 13
    Points
    13
    Par défaut
    Super un grand merci !!
    l'équivalence permet de bien saisir !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Allocation dynamique: Tableau de pointeur sur char
    Par Anonymouse dans le forum Débuter
    Réponses: 4
    Dernier message: 21/10/2007, 11h57
  2. Réponses: 6
    Dernier message: 04/01/2007, 02h30
  3. Réponses: 9
    Dernier message: 22/12/2005, 23h20
  4. Pb d'allocation dynamique avec malloc
    Par Magicmax dans le forum C
    Réponses: 5
    Dernier message: 12/12/2005, 02h04
  5. allocation dynamique et non dynamique...
    Par youp_db dans le forum C
    Réponses: 3
    Dernier message: 02/10/2005, 14h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo