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 :

pointeur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 3
    Par défaut pointeur
    salut j'ai un probleme de chaine
    quand on met
    char *
    ca signifie koi et combien d'espace la memoire peut reserver
    autre chose je ne comprend pas comment peut n acceder a des element d'un tableau de chaine de caractère un par un par exm
    et que signifie
    char a[2][50],*p;
    p=(char *)a;
    et hyper merci

  2. #2
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 35
    Par défaut
    salut

    alors char* signifie que tu pointes un charactère (ou une chaine, mais on dira un caractère pour faire simple, une chaine n'étant qu'une suite de caractère se finissant par '\0')

    l'espace que tu peux allouer tu ne le sais pas à l'avance !!!
    normalement tu ne devrais jamais avoir de problèmes au début !!
    pour ça tu fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #define TAILLE_A_ALOUER     1024  // taille allouée en mémoire
    char *pPointeurSurMaChaine;
    pPointeurSurMaChaine = malloc(TAILLE_A_ALOUER * sizeof(char));
    if(pPointeurSurMaChaine == NULL)
    {
          printf("Erreur, plus de mémoire disponible\n");
          exit(-1);
    }
    sinon, pour accéder aux différentes chaines d'un tableau tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #define NB_CHAINES     88 //nombre de chaines dans mon tableau
    #define TAILLE_CHAINES  128 // taille des chaines de caractères
    char MonTableau[NB_CHAINES][TAILLE_CHAINES]
    char* pMaChaine;
     
    pMaChaine = MonTableau[10]; // on accède à la ONZIèME CHAINE (on commence à 0 en C ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    et que signifie 
    char a[2][50],*p;  // a est un tableau contenant 2 chaines de 50 caractères et p un pointeur sur un caractère
    p=(char *)a; // p pointe sur la première chaine de caractère (sur le premier élément de la première chaine pour être plus précis)
    voilà, j'espère avoir été assez clair

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2002
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 51
    Par défaut
    Un pointeur est une adresse memoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char a[2][50],*p;
    p=(char *)a;
    Signifie qu'apres que ces 2 lignes se soient exécutées, la variable a contient l'adresse du premier element de p.

    Tu peux alors acceder au premier element de a en faisant *p (recuperation de ce qui se trouve a l'adresse d'un pointeur).
    Si tu fait p++; la variable p va pointer sur le 2eme element de ton tableau ( a[0][1] ) ...

    Voila j'espere que ça t'apportera quelques lumieres. Mais les pointeurs est l'une des chose les plus difficile à maitriser en C, alors courage...

  4. #4
    Membre averti
    Inscrit en
    Septembre 2003
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 16
    Par défaut de meme
    de meme, quand :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char a[2][50],*p; 
    p = (char *)a
    p += 50;
    *p pointera sur a[1][0], soit, la premiere case de la 2eme ligne de ton tableau.

  5. #5
    Membre confirmé

    Profil pro
    none
    Inscrit en
    Août 2002
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Août 2002
    Messages : 80
    Par défaut
    Slt,

    Excellent cours pour apprendre la programmation en C : http://c.developpez.com/cours/


    Angi.

  6. #6
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 506
    Par défaut
    je me demandais,

    p = (char *)a

    équivaut à

    p = a

    non ? c comme ça que je l'ai lu ds un livre, mais je sais pas s'il s'agit de la même chose: assigner au pointeur le premier elmt du tablo a...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Par défaut
    en faisant tu caste "a" en char* juste pour cette instruction, ce qui veut dire que tu dis a la machine, quelque soit 'a' (int, char,long) là je veux que ce soit un pointeur sur caractere, resultat en faisant a condition que p est été declaré en char* egalement, tu vas mettre dans "p" le contenu de a quelqu il soit ( ca pourrait etre une adresse, un chiffre n importe koi suivant comment tu as declaré a au debut) et codé sur 4octets ( les pointeurs sont codé sur 4 octets)

  8. #8
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Par défaut
    oui on doit pouvoir supprimier le cast...

    kalifornication > non les pointeurs ne font pas 4 octets... enfin pas toujours...

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 29
    Par défaut
    gandalf, explik toi un peu mieu,
    pour moi, et actuellement (architecture 32 bits et code c) les pointeurs sont de 32 bits soit 4 octets et avc un microp de categorie pentium

  10. #10
    Membre confirmé
    Inscrit en
    Septembre 2003
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 35
    Par défaut
    sur l'ATMEL sur lequel je bosse là ils font 2 ou 3 octets suivant la zone que j'adresse !

    donc ne pas oublier que ton code DOIT ETRE PORTABLE
    effectivement sur ton pentium t'auras un pointeur de 4 octets actuellement
    d'où la limite des 4 go de RAM ...

    maintenant si dans un développement tu considères qu'un pointeur fait 4 octets, le jour où tu le porteras ça ne marchera plus ...

    combien voit-on de demandes du type : ça marchait hier et plus aujourd'hui (suite à nouvel OS, ou etc. ..) ??

  11. #11
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2002
    Messages : 290
    Par défaut
    Meme Sur Pentium, il font 4 octets dans le model memoire Flat...
    en Dos ils faisaient 16 ou 32 bits selon qu'il étaient near ou far
    et on en trouve meme qui font 8 octets, sur les stations 64 bits...

  12. #12
    Membre à l'essai
    Inscrit en
    Septembre 2003
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 3
    Par défaut
    Un pointeur est une adresse memoire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char a[2][50],*p;
    p=(char *)a;
    Signifie qu'apres que ces 2 lignes se soient exécutées, la variable a contient l'adresse du premier element de p.

    Tu peux alors acceder au premier element de a en faisant *p (recuperation de ce qui se trouve a l'adresse d'un pointeur).
    Si tu fait p++; la variable p va pointer sur le 2eme element de ton tableau ( a[0][1] ) ...

    Voila j'espere que ça t'apportera quelques lumieres. Mais les pointeurs est l'une des chose les plus difficile à maitriser en C, alors courage...
    En commancant je te remercie de s'interesser a mon pb
    mais le pb qui se pose c que pour les chaines si on mais comme tu dit
    char a[50],*p;
    p=a;
    printf("%s",a);
    la chaine en entier s'afficher alors que pour les tab numerique c pas la m^m logique
    en un mot je trouve une grand differance entre les tab char et ceux int la m^m chose avec les ptr sur char et sur int
    un ptr sur char me donne toutes la chaine mais sur un tab de int me donne la 1er val
    tu me comprend : j'espère
    et merci bcp

  13. #13
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par jexistetjs
    mais le pb qui se pose c que pour les chaines si on mais comme tu dit
    char a[50],*p;
    p=a;
    printf("%s",a);
    la chaine en entier s'afficher alors que pour les tab numerique c pas la m^m logique
    En fait ca vient tout simplement du fait qu'en C une chaine est un tableau de char termine par '\0'. Donc quand tu utilise %s tu affiche la chaine, c'est a dire l'ensemble des caracteres du tableau jusqu'au \0.
    La difference ne se situe donc pas entre un tableau de char et un tableau de nombre mais entre %s et, par exemple, %d. Si tu veux avoir un comportement similaire lors de l'affichage (c'est a dire imprimer un seul caractere), il ne faut pas utiliser %s mais %c

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

Discussions similaires

  1. pointeurs
    Par ghost74 dans le forum C
    Réponses: 3
    Dernier message: 14/12/2002, 02h52
  2. Pointeur vers un tableau
    Par Nikos dans le forum C
    Réponses: 3
    Dernier message: 09/12/2002, 00h43
  3. [Turbo Pascal] Allocation et désallocation de pointeurs dans une fonction
    Par neird dans le forum Turbo Pascal
    Réponses: 13
    Dernier message: 17/11/2002, 20h14
  4. djgpp et pointeurs far -2
    Par elvivo dans le forum Autres éditeurs
    Réponses: 16
    Dernier message: 29/07/2002, 22h43
  5. djgpp et pointeurs far
    Par elvivo dans le forum C
    Réponses: 2
    Dernier message: 13/07/2002, 00h44

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