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 :

Addition d'adresses mémoire.


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Par défaut Addition d'adresses mémoire.
    Bonjour,

    je cherche en C à additionner des adresses mémoires à partir d'une adresse initiale.

    Le problème est que j'obtiens des résultats complètement farfelues comme par exemple :
    342802128
    342802120
    342802112
    342802104
    342802196

    alors qu'une seule unité est incrémentée à chaque fois.

    Je penses que c'est une erreur de débutant, mais pouvez-vous me dire pourquoi ?

    Merci

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Faudrait préciser ta question, c'est pas clair du tout.

    Si tu as un pointeur sur un type et que tu l'incrémentes de 1, sa valeur va augmenter en réalité de sizeof(type) bytes.
    Exemple : si tu as un pointeur sur int et que sa valeur est (au pif) 0x12345678, et que tu incrémentes de 1 ce pointeur, sa valeur sera augmentée de 4 (car généralement, int fait 4 bytes) ; il aura donc pour valeur 0x1234567C et non 0x12345679.
    Si c'est un pointeur sur double, l'incrémentation augmentera sa valeur de 8. Pour un pointeur sur char, ce sera 1.
    Même chose concernant un pointeur sur structure, qu'on incrémenterait, cela dépend de la taille de la structure.
    etc...
    Tu auras plus d'infos en cherchant du côté de l'arithmétique des pointeurs.

    Je ne sais pas si ça répond à ta question...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Par défaut
    Ta réponse me convient car il s'agit d'un pointeur sur une chaine de caractère.

    Ce que je ne comprend pas, c'est quel type utiliser pour afficher un caractère a partir d'un pointeur ? Il me parraitrait logique d'utiliser %c comme ceci :

    printf("caractère %c trouvé\n", *atrouver[1]);
    Seulement cela ne fonctionne pas...

    Une explication ? Je me trompe de logique ?

  4. #4
    Membre éprouvé Avatar de Flow_75
    Femme Profil pro
    Ingénieure
    Inscrit en
    Mai 2005
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieure
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 104
    Par défaut
    Citation Envoyé par clem85 Voir le message
    Ta réponse me convient car il s'agit d'un pointeur sur une chaine de caractère.

    Ce que je ne comprend pas, c'est quel type utiliser pour afficher un caractère a partir d'un pointeur ? Il me parraitrait logique d'utiliser %c comme ceci :



    Seulement cela ne fonctionne pas...

    Une explication ? Je me trompe de logique ?
    Si tu as une chaine de caractère définie par :

    Pour afficher un caractère de la chaine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("caractère %c trouvé\n", tableau[1]);

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Par défaut
    Dans mon cas, je me trouve dans une fonction définie comme cela:
    int verifmot(char *atrouver[], int *addrdebut)
    Je viens de trouver mon erreur, je passe en paramètre l'adresse de mon tableau de chaine de caractère. Je retrouve ce que je veut en définissant ma fonction comme ceci :
    int verifmot(char *atrouver, int *addrdebut)
    Merci pour votre aide et vos éclaircisssements

    @+

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 398
    Par défaut
    Que veux-tu dire par "additionner des adresses mémoire" ?

    On n'additionne pas deux adresses: On ne peut qu'additionner une adresse et un décalage.

    ...Ou on peut additionner des entiers pointés par les adresses en question...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 4
    Par défaut
    je voulais parcourir x adresses mémoires à partir d'une autre dans un boucle for par exemple.

    Donc sa correspond a une adresse avec un décallage. Ce que je ne comprenais pas c'est que je n'arrivais pas a décaller que de 1. Il est normal que le décalage soit de 8 car j'utilise des chaines de caractère.

  8. #8
    Membre émérite
    Avatar de Pouet_forever
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    671
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 671
    Par défaut
    Il faut savoir que l'addition de pointeurs est illicite aussi.
    Tu n'as pas le droit d'additionner 2 pointeurs, mais tu as le droit des les soustraire par contre

    Sinon tu peux utiliser les opérateurs bitwise si tu veux travailler sur les bits

  9. #9
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Par défaut
    Le mieux, c'est de poster ton code complet, car sinon c'est difficile de cerner la chose.

Discussions similaires

  1. Adresse mémoire partagée
    Par dave.vuistiner dans le forum Assembleur
    Réponses: 4
    Dernier message: 10/08/2006, 20h45
  2. Réponses: 16
    Dernier message: 30/05/2006, 19h46
  3. lire la valeur d'une adresse mémoire
    Par ilimo dans le forum Windows
    Réponses: 17
    Dernier message: 11/04/2006, 16h21
  4. PRoblème d'adresse mémoire
    Par pmboutteau dans le forum Access
    Réponses: 11
    Dernier message: 07/04/2006, 12h00
  5. Réponses: 6
    Dernier message: 19/09/2005, 20h48

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