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 :

Petite précision sur les pointeurs


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 32
    Points : 26
    Points
    26
    Par défaut Petite précision sur les pointeurs
    Bonjour,
    J'ai une petite question concernant les pointeurs et l'accès aux données pointées par ceux-ci.

    Par exemple, je crée une petite structure:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef struct pair_int pair_s;
    struct pair_int{
        int a;
        int b;
    };
    ensuite, dans un programme, je souhaite créé un tableau de pair_s au moyen de malloc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pair_s *pair = malloc(sizeof(pair_s)*10);
    Voici ma question: Quelle est la différence exacte entre les deux lignes ci-dessous? En fait, quand j'imprime les valeurs de ma pair, je n'obtiens pas le même résultat à la console.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int i;
    for(i=0;i<10;i++)printf("a:%i, b:%i\n",pair[i].a,pair[i].b); //ligne 1
    for(i=0;i<10;i++)printf("a:%i, b:%i\n",pair+(sizeof(pair_s)*i)->a,pair+(sizeof(pair_s)*i)->b); //ligne 2
    La ligne 2 me permet d'imprimer les bonnes valeurs mais logiquement, la ligne 1 devrait le faire aussi.

    Quelqu'un a une idée???

    Merci d'avance
    Fonzy

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    D'abord, il faudrait régler ton compilo correctement car il devrait te signaler une erreur à la ligne 2 : pair+(sizeof(pair_s)*i)->a
    Le parenthèsage est incorrect tu dois écrire (pair+sizeof(pair_s)*i)
    Secundo, le compilo calcule automatiquement la taille d'incrémentation pour un pointeur donc pair[i].a est égal à (par+i)->a, tu n'as pas besoin de multiplier par la taille de la structure.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 32
    Points : 26
    Points
    26
    Par défaut
    ok merci. Je comprend mieux maintenant.
    pour le code, je l'ai fait en vitesse en écrivant le post car le code que je développe est un peu plus complexe

    ++

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 27/01/2012, 14h48
  2. Petit problème sur les pointeurs :
    Par bertry dans le forum Débuter
    Réponses: 9
    Dernier message: 15/03/2011, 10h18
  3. petite question sur les pointeurs
    Par Krisprolls31 dans le forum C
    Réponses: 4
    Dernier message: 20/08/2010, 22h19
  4. petite précision sur les foncteurs
    Par DEVfan dans le forum C++
    Réponses: 6
    Dernier message: 28/03/2008, 00h22
  5. une petite question sur les pointeurs
    Par guy777 dans le forum C
    Réponses: 4
    Dernier message: 06/10/2006, 17h44

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