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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 averti
    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
    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 averti
    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
    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 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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 026
    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.

+ 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, 10h57
  2. Réponses: 6
    Dernier message: 04/01/2007, 01h30
  3. Réponses: 9
    Dernier message: 22/12/2005, 22h20
  4. Pb d'allocation dynamique avec malloc
    Par Magicmax dans le forum C
    Réponses: 5
    Dernier message: 12/12/2005, 01h04
  5. allocation dynamique et non dynamique...
    Par youp_db dans le forum C
    Réponses: 3
    Dernier message: 02/10/2005, 13h32

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