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 :

votre recette pour les pointeurs


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Novembre 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut votre recette pour les pointeurs
    Bonjour,

    Je débute avec la programmation c ,et je veux bien que tout le monde nous parle du comment il a vaincu la bête noir qui est les pointeurs ,quels question se poser pour savoir où les utiliser ,et quand bien sur,j'aimerais bien maitriser cette partie du C mais à chaque fois les pointeurs je ne sais pas manipuler ,de la meilleur façon ,et merci à vous tous...

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 950
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 950
    Points : 5 667
    Points
    5 667
    Par défaut
    Hai,

    C'est bête comme tout :

    - à la déclaration, initialiser à NULL, pour éviter d'utiliser un pointeur vers n'importe quoi.
    - réserver une taille mémoire suffisante pour ce qu'on veut faire
    - utiliser...
    - libérer la mémoire quand on n'en a plus besoin
    - ET remettre le pointeur = NULL

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par danielmorgan Voir le message
    Je débute avec la programmation c ,et je veux bien que tout le monde nous parle du comment il a vaincu la bête noir qui est les pointeurs ,quels question se poser pour savoir où les utiliser ,et quand bien sur,j'aimerais bien maitriser cette partie du C mais à chaque fois les pointeurs je ne sais pas manipuler ,de la meilleur façon ,et merci à vous tous...
    http://emmanuel-delahaye.developpez.....htm#pointeurs
    http://emmanuel-delahaye.developpez....util_pointeurs

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par droggo Voir le message
    - à la déclaration, initialiser à NULL, pour éviter d'utiliser un pointeur vers n'importe quoi.
    - réserver une taille mémoire suffisante pour ce qu'on veut faire
    - utiliser...
    - libérer la mémoire quand on n'en a plus besoin
    - ET remettre le pointeur = NULL
    Qui a parlé de mémoire dynamique ?

  5. #5
    Scorpi0
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    comment il a vaincu la bête noir qui est les pointeurs
    Utiliser, utiliser, se tromper, core dump, corriger, post sur le forum, prise de tête, réessayer, encore, encore, et au bout d'un moment, ça rentre !

    N'hésites pas à lire beaucoup, mais rien ne vaut la pratique. Tant que tu ne te seras pas tromper sur chacun des aspects des pointeurs toi même, tu n'apprendras pas.

  6. #6
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Les pointeurs n'ont aucune raison d'être une bête noire. Il faut simplement prendre le temps de réfléchir à ce qu'ils sont : ils stockent une adresse, donc comprendre ce qu'est une adresse, comment on peut s'en servir pour accéder à un objet et l'arithmétique particulière aux adresses. Ce ne sont pas des choses compliquées.

    A retenir pour éviter des erreurs :

    - Créer un pointeur ne crée pas l'objet pointé.

    - Un pointeur doit contenir l'adresse d'un objet "vivant", non détruit, ou NULL.
    Lorsque l'objet est détruit, le pointeur devient invalide. Il est prudent de le mettre à ce moment là à NULL, ce qui permet de savoir qu'il ne pointe sur rien.

    - Un pointeur n'est pas un tableau et un tableau n'est pas un pointeur (Si il y a en C une bête noire à montrer du doigt, ce sont plutôt les tableaux). Le lien entre les deux est uniquement l'arithmétique propre aux adresses qui correspond à la sélection des éléments d'un tableau (les éléments d'un tableau ne sont accessibles que par leur adresse, même si la notation [] masque ce fait).

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 950
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 950
    Points : 5 667
    Points
    5 667
    Par défaut
    Sia,
    Citation Envoyé par Emmanuel Delahaye Voir le message
    Qui a parlé de mémoire dynamique ?
    Qui n'en a pas parlé ?

    Telle qu'elle est posée, la question me conduit directement à ça.

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par droggo Voir le message
    Qui n'en a pas parlé ?
    le P.O.
    Telle qu'elle est posée, la question me conduit directement à ça.
    Tu as l'air d'assimiler l'usage des pointeurs à l'usage de la mémoire dynamique. C'est certes un des usages, mais il y a d'autres, à commencer par le "passage" d'un tableau à une fonction.

  9. #9
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Un pointeur c'est une variable dont la valeur est l'adresse d'un truc. Il n'y a vraiment rien de compliqué ou de mystérieux là dedans.

  10. #10
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par matafan Voir le message
    Il n'y a vraiment rien de compliqué ou de mystérieux là dedans.
    Quand on n'a utilisé que des langages dans lequel la notion d'adresse n'existe pas (java) ou très faible (pascal), la notion de pointeur C/C++ n'est pas forcemment simple à appréhender.

  11. #11
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Quand on n'a utilisé que des langages dans lequel la notion d'adresse n'existe pas (java) ou très faible (pascal), la notion de pointeur C/C++ n'est pas forcemment simple à appréhender.
    Franchement, cette notion est basique, pratiquement intuitive, et n'est pas liée à la programmation:

    1- Il existe quelque chose (ici un objet).
    2- Cette chose est donc à un endroit dans le monde.
    3- Cet endroit s'appelle son adresse.

    On a fait le tour de la notion.

    Même si elle est masquée par le langage, il n'en reste pas moins que si je ne sais pas où se trouve un objet, comment y accéder ?

    C'est une notion utilisée tout les jours : Si j'envoie une lettre, je dois donner l'adresse du destinataire; si je téléphone, je dois connaître le numéro de mon correspondant,...

    C'est un concept banal, utilisé communément tous les jours sans y penser. Après, il y a la question de la syntaxe pour exprimer dans un langage tout ça. Mais, c'est accessoire.

  12. #12
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 950
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 950
    Points : 5 667
    Points
    5 667
    Par défaut
    Gao,
    Citation Envoyé par Emmanuel Delahaye Voir le message
    le P.O.

    Tu as l'air d'assimiler l'usage des pointeurs à l'usage de la mémoire dynamique. C'est certes un des usages, mais il y a d'autres, à commencer par le "passage" d'un tableau à une fonction.
    Non, je n'assimile pas l'un à l'autre, mais mon expérience m'a appris que les problèmes de pointeurs, surtout pour les débutants, sont plus souvent liés à la mémoire dynamique qu'aux autres usages qui sont généralement plus facilement compris ("généralement", pas toujours, hélas).

  13. #13
    Membre habitué
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Points : 180
    Points
    180
    Par défaut
    Bonjour, moi je débute aussi en C, je sais très bien qu'un pointeur n'est que l'adresse d'un truc, mais ce que j'ai compris récemment, c'est que :
    (1°) une fois qu'on a déclaré un pointeur vers l'entier truc par "int *ptruc;" ,
    (2°) on peut ensuite accéder à l'entier truc en "déréférençant" le pointeur par "*ptruc=2;" . Et alors l'entier truc vaut deux. (et on ne peut déréférencer que quelque chose qui a été déclaré comme un pointeur)
    David

  14. #14
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par dva2tlse Voir le message
    (1°) une fois qu'on a déclaré un pointeur vers l'entier truc par "int *ptruc;" ,
    (2°) on peut ensuite accéder à l'entier truc en "déréférençant" le pointeur par "*ptruc=2;" . Et alors l'entier truc vant deux.
    A condition qu'on ait mis dans ce pointeur l'adresse d'un entier, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int truc;
    int * ptruc;
    ptruc = &truc;
    * ptruc = 2;
    // ou directement, mais sans grande utilité (bien sûr, dans ce cas on écrira simplement truc = 2)
    *&truc = 2;
    (et on ne peut déréférencer que quelque chose qui a été déclaré comme un pointeur)
    On ne peut déréférencer qu'une adresse. Celle-ci peut n'être pas contenue dans un pointeur, mais peut être représentée par le nom d'un tableau

  15. #15
    Nouveau Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    Tout les débutants du c ont des lacunes sur la notion des pointeurs.
    Mais, d'une façon générale, on peut dire que les pointeurs offrent la possibilité d'accéder aux données dans la mémoire de l'ordinateur.
    De plus les pointeurs ont une grande efficacité dans les programmes géants (l'accés au certaines variables,modification...)
    Donc, le pointeur vise toujours à éviter le gaspillage du mémoire.

  16. #16
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par hajour Voir le message
    Bonjour,
    Tout les débutants du c ont des lacunes sur la notion des pointeurs.
    C'est peut être parce qu'on leur explique mal...
    Mais, d'une façon générale, on peut dire que les pointeurs offrent la possibilité d'accéder aux données dans la mémoire de l'ordinateur.
    Non. Uniquement aux données du processus courant (ou de la mémoire partagée si ce mécanisme existe.

    Les accès à la"mémoire de l'ordinateur" ne sont pas possible en C standard. Et quand une extension le permet, ils sont sévèrement réglementés par les système modernes avec MMU, même en mode noyau.

    De plus les pointeurs ont une grande efficacité dans les programmes géants (l'accés au certaines variables,modification...)
    Donc, le pointeur vise toujours à éviter le gaspillage du mémoire.
    Les pointeurs sont une facilité, un moyen, pas un but... Il permettent parfois une meilleure gestion de la mémoire en évitant les copies de blocs (seul l'adresse suffit).

Discussions similaires

  1. Votre vote pour les élections présidentielles 2007 ?
    Par hegros dans le forum Politique
    Réponses: 615
    Dernier message: 29/04/2007, 21h24

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