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 :

quetion toute bête sur le type des pointeurs


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut quetion toute bête sur le type des pointeurs
    Bonsoir,

    Je regarde la POO : les pointeurs vers des classes, et un truc me perturbe : quand on fait :, on réserve un emplacement mémoire pour p : est-ce que p a un type ? Ou bien les pointeurs on tous un type ? Ici c'est int* ?

    J'avoue ne pas avoir très bien saisi. Merci. Bonne soirée. Cordialement, Gizmo.

  2. #2
    Membre chevronné Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 044
    Points : 2 241
    Points
    2 241
    Par défaut
    Bonjour,
    Ne réserve absolument rien, sauf 4 octets pour l'adresse sur quoi il va pointer.
    le new, lui, alloue de la mémoire. Et le delete la libère.

    Le c++ est fortement typé, le pointeur doit pointer sur un type connu par lui même.

    Un pointeur sur un string ne pourrais pointer que sur un string.

    Ici dans ton exemple, le pointeur est un pointeur sur un int, donc tu ne pourras pointer que sur des int.
    Son type est "pointeur sur entier".

    Si tu fais un new avec ton pointeur tu peux voir la chose comme tel:
    1_allocation de la mémoire nécessaire pour garder en mémoire un objet, ou type de base(int,float,double,etc...) qui est celui donné en face du "*p"
    2_faire pointer p sur cette zone mémoire.

    En partant de là, tu comprendras donc pourquoi il faut faire un delete et que c'est dangereux les pointeurs. Si tu viens à faire pointer ton pointeur sur une autre zone mémoire sans liberer celle que tu as alloué, tu ne pourrais pas la récupérer. Et tu auras une zone mémoire alloué pour rien. Si tu fais ça dans une boucle tu pourras voir ta ram explosé en demande.

    Tu rencontreras aussi
    Il s'agit d'un pointeur sur n'importe quoi. Mais là encore attention danger car c'est à l'utilisateur (au codeur) de savoir sur quoi il vas pointer, tu ne peux pas dire " j'ai un pointeur de n'importe quoi, je veux le faire pointer sur un int". Tu devras d'abord transformer ton pointeur avec un cast C++, static_cast, reinterpret_cast. Ceci ne devrais jamais t'arriver. Le pointeur sur void* est a oublié si tu ne fais pas de la programmation très bas niveau à même le hardware

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Juste pour préciser qu'un pointeur ne fait pas forcément 32 bit. Cela dépend de la plateforme

    Sinon, le type de p est pointeur sur int. pointeur sur int est une type différent de int ou pointeur sur short par exemple. Et, *p est de type int.

  4. #4
    Invité
    Invité(e)
    Par défaut
    D'accord merci. En fait l'écriture logique serait : : ici on comprend mieux que p est de type int*
    Mais on voit aussi écrit : : là on pourrait croire que p est de type int : mais *p est pourtant bien de type int mdr
    Bonne soirée.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Le problème vient des déclarations multiples:
    Si tu tapes int *a, b;, seul a est un pointeur (le compilo se moque des espaces dans tous les cas).

  6. #6
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Citation Envoyé par gizmo27 Voir le message
    D'accord merci. En fait l'écriture logique serait : : ici on comprend mieux que p est de type int*
    Mais on voit aussi écrit : : là on pourrait croire que p est de type int : mais *p est pourtant bien de type int mdr
    Bonne soirée.
    la première est plus C++ et la seconde plus C ...
    La première met plus l'accent sur le type, (pointeur sur int) mais est aussi plus casse gueule en cas de déclaration multiple sur une ligne...

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Le problème vient des déclarations multiples:
    Citation Envoyé par Goten Voir le message
    mais est aussi plus casse gueule en cas de déclaration multiple sur une ligne...
    Toutes les règles de codage que j'ai vu qu'elles soient C ou C++ interdisent la déclaration multiple sur une seule ligne (règle que je trouve cohérente ne serait-ce qu'en terme de lisibilité et pour lever ces ambiguïtés). En ce sens, coller * ou & au type redevient pertinent si on part de l'hypothèse que faire plusieurs déclaration sur un même ligne est tabou

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/05/2009, 08h31
  2. Des questions toutes bêtes sur l'AS/400
    Par longbeach dans le forum AS/400
    Réponses: 4
    Dernier message: 31/03/2008, 22h56
  3. Question toute bête sur les formulaires
    Par pekka77 dans le forum Langage
    Réponses: 5
    Dernier message: 01/12/2005, 23h45
  4. Question toute bête sur le passage de variable
    Par pekka77 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/11/2005, 12h39
  5. [Dates] Calcul tout bête sur une date...
    Par poah dans le forum Langage
    Réponses: 5
    Dernier message: 01/11/2005, 15h02

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