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 :

probleme de comprehension pointeurs*


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 4
    Par défaut probleme de comprehension pointeurs*
    voila j apprend le c grace au site zero et j ai du mal avec les pointeurs,je m explique.
    voila le code source de leur pointeur permettant de recup l adresse de la variable
    age.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int age = 10;
    int *pointeurSurAge = &age;
     
    printf("%d", pointeurSurAge);
    Honnetement j ai du mal a comprendre cette notion malgre tous les tutos regarde sur internet, pour moi le pointeur est une variable speciale permettant de stocker l adresse en memoire d une variable predefinie.
    Dans le code source en haut il declare la variable de type int et lui indique une valeur de 10.Ensuite declare son pointeur de type int reprenant le type de la variable age et lui dit qu elle est = a l adresse de la variable age grace a &.
    jusque la ca va mais quand il veut l afficher grace a la fonction printf plusieurs point ne sont pas clair dans mon esprit.

    1)printf("%d", pointeurSurAge);===>il fait reference a une variable pointeur sur age et pas a un pointeur car pas d'* pour moi hors aucune variable pointeur sur age declare ou suffit il juste de la declarer le pointeur grace a l'* au debut et plus besoins par la suite?

    2)%d permet d afficher une variable de type decimal et %p de type hexadecimal?

    3)J ai du mal a comprendre a mon niveaux l interet des pointeurs, stocker l adresse qu attribue l os, mais qu el est l interet ?????????

    Merci beaucoup pour vos precieux conseils, je suis un noob en programmation et trouve cela tres interessant meme si je ne comprend pas toute les subtilitees et ce n est que le debut

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    1)printf("%d", pointeurSurAge);===>il fait reference a une variable pointeur sur age et pas a un pointeur car pas d'* pour moi hors aucune variable pointeur sur age declare ou suffit il juste de la declarer le pointeur grace a l'* au debut et plus besoins par la suite?
    .....
    Ce code tente d'afficher la variable pointeurSurAge qui est du type int *, soit adresse d'un int. Il va donc afficher quelque chose qui ressemble à l'adresse de age.
    Ce code est incorrect. L'affichage d'une adresse se fait avec le formateur %p. Le formateur %d, lui, affiche un int sous la forme décimale. (attention à la confusion extrèmement dangereuse dans son principe entre entier et adresse qui sont deux concepts entièrement différents et dont on doit se garder absolument)

    On doit avoir
    - si on veut afficher la valeur de age en décimal (10) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    printf("%d", *pointeurSurAge);
    // ou
    printf("%d", age);
    - si on veut afficher l'adresse de age (le format d'affichage dépend de l'implémentation) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%p", (void*)pointeurSurAge);

    Sur l'utilisation et l'intérêt d'accéder à un objet via son adresse, tu les découvriras bientôt. Pour l'instant, considère les notions d'adresse et de pointeur, qui sont simples, comme essentielles et ne les négligent surtout pas.

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut, et bienvenue sur le forum.

    En C, la notion de pointeur est réellement primordiale, parce que c'est elle qui permet:
    1. De passer une variable à une fonction qui doit la modifier en s'assurant que la modification sera répercutée dans la fonction appelante
    2. de créer des tableaux de variables contigües en mémoire
    3. De mettre en relation des objets dont la durée de vie est indépendante
    4. De mettre en relation un objet et celui qui le contient dans une relation "conteneur / contenu".
    5. j'oublie surement quelques cas
    Il est vrai que, à la base, le fait de se dire qu'un pointeur représente "l'adresse mémoire d'une variable" peut ne pas vraiment présenter d'intérêt, mais il ne faut pas oublier le fait que strictement tout dans un ordinateur est accessible... depuis une adresse.

    C'est, bien sur, vrai pour les types primitifs et les types définis par l'utilisateur (struct), mais ce l'est aussi pour les fonctions (hé oui ) et même pour les différents éléments constitutifs de l'ordinateur, qu'ils soient internes (disques durs, carte son, carte graphiques, ...) ou externes (imprimante, scanner, ...)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

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

    Informations forums :
    Inscription : Juin 2010
    Messages : 4
    Par défaut
    desole mais etant un noob j ai du mal a assimiile?

    Qu est ce que l implementation?c est le %?
    Avec ce code on affiche la valeur de la variable age mais je pensais qu un pointeur pointé justement sur une adresse?A ce moment la mon pointeur n est d aucune utilitée????????
    %d====>??
    %p====>??
    &=====>?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int age = 10;
    int *pointeurSurAge = &age;
    printf("%d", *pointeurSurAge);
    // ou
    printf("%d", age);
    Pourriez vous m expliquez comme si j etais un enfant???si cela est possible??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *pointeur sur variable=adresse le la variable
    dans mon esprit.
    Merci de vos reponses rapides et argumentees et de votre patience ^^
    que me conseillez vous peut etre sinon comme alternative a ce tuto?

  5. #5
    Membre chevronné
    Avatar de haraelendil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 283
    Par défaut
    non, si tu définit un pointeur comme ça:
    pointeur contient l'adresse, mais *pointeur donne la valeur à l'adresse donnée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int i = 5;
    int* pointeur;
    pointeur = &i; //pointeur pointe sur l'emplacement mémoire ou est stocké i
    printf("%d", pointeur); //affiche l'adresse
    printf("%d", *pointeur); //affiche la valeur, donc ici 5
    et pour les "%d" et tout, ce sont les codes de formatage de la fonction printf pour afficher des nombres et autres, une recherche de printf sous google te donnera tout ce que tu a besoin de savoir.

    Après, c'est difficile de trouver plus simple que les tutoriels C du site.
    Ce que tu peux faire, c'est essayer, tourner le problèmes dans tous les sens, et ça finira bien par venir.
    Au pire une petite pause et revient voir demain à tête reposée ce que ça peut donner

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Qu est ce que l implementation?
    Sous ce terme (un anglicisme), on désigne comment le compilateur C a été réalisé. Un compilateur C doit effectuer la plupart des choses d'un manière déterminée par la norme du langage. Ces choses sont donc faites de la même façon (ou du moins on obtient le même résultat) quel que soit le compilateur C utilisé (pourvu qu'il se conforme à la norme évidemment). Par contre, la norme ne définit pas ce qui se passe dans certaines situations en laissant au compilateur la liberté de son comportement. Un code C qui utilise ces situations particulières n'est pas faux, mais est non portable parce que pouvant donner des résultats différents selon le compilateur utilisé, "selon l'implémentation".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int age = 10; // Définit un objet age du type int et l'initialise à la valeur 10
    int *pointeurSurAge = &age;  // Définit un objet pointeurSurAge du type "adresse d'un int" (int*)
                                 // et l'initialise avec l'adresse de l'objet age (&age)
    printf("%d", *pointeurSurAge); // Affiche la valeur de l'objet (de type int à cause de %d) 
                                   // qui se trouve à l'adresse contenue dans pointeurSurAge (*pointeurSurAge).  
                                   // pointeurSurAge contient l'adresse de age, donc affiche la valeur de age
    printf("%d", age); // Affiche la valeur de age

Discussions similaires

  1. Probleme de comprehension de code
    Par joxbl dans le forum Langage
    Réponses: 2
    Dernier message: 30/05/2006, 19h58
  2. probleme de souris/pointeur
    Par muquet dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 20/04/2006, 16h17
  3. Réponses: 8
    Dernier message: 30/12/2005, 13h47
  4. Probleme avec des pointeurs...
    Par barucca dans le forum C++
    Réponses: 5
    Dernier message: 23/08/2005, 21h05
  5. [ADODB]probleme de comprehension
    Par flogreg dans le forum ASP
    Réponses: 2
    Dernier message: 15/11/2004, 16h15

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