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

Langage C++ Discussion :

[Langage] question de notations


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut [Langage] question de notations
    je sais que c'est qu'une question de notations, mais est il plus logique d'écrire:

    que
    car *t signifie que *t est en fait un double et que t point vers un double.

    double* n'est pas un type de C++.


    En revanche, la notation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double **tab=new double*[10000];
    signifie que *tab est un tableau de pointeurs.
    par contre, comment comprendre : double*[10000]

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Par défaut
    A mon avis c'est personnel. Moi je préfère:
    J'ai une variable qui s'appelle "t", et son type est "pointeur vers double".


    J'ai une variable qui s'appelle "tab", et son type est "pointeur vers pointeur vers double".


    J'ai un tableau de taille 10000 qui s'appelle "tab", et qui contient des "pointeur vers double".


    Dans la pratique, depuis que j'ai découvert les conteneurs de la STL, je me rappel pas d'avoir écrit un programme avec un tableau, sauf quand j'utilise une bibliothèque dont les fonctions prennent des tableaux en paramètre. Dans ce cas je travail avec la STL et convertit en tableau au dernier moment.

    Edit: Pour moi *t c'est ça:

    Encore une fois, c'est personnel.

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    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 395
    Par défaut
    C'est compliqué, mais il ne faut pas oublier que:
    ne déclare pas b en tant que pointeur sur double, mais en tant que double.
    Par contre, ceci le fait:
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    typedef double *pdouble;
    pdouble a, b;
    De nos, jours, j'ai tendance à mette un espace des deux côtés de l'étoile.
    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.

  4. #4
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    De nos, jours, j'ai tendance à mette un espace des deux côtés de l'étoile.
    Pareil, et le const entre les deux premiers.

  5. #5
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Citation Envoyé par deubelte Voir le message
    je sais que c'est qu'une question de notations, mais est il plus logique d'écrire:

    que
    car *t signifie que *t est en fait un double et que t point vers un double.

    double* n'est pas un type de C++.
    C'est comme ça je le vois en tout cas


    Citation Envoyé par deubelte Voir le message
    En revanche, la notation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double **tab=new double*[10000];
    signifie que *tab est un tableau de pointeurs.
    par contre, comment comprendre : double*[10000]
    Un tableau de 10 000 pointeurs vers double ?

  6. #6
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    bien sur que c'est un tableau de 1000 points, mais ce qui me gène c'est:

    et même plutot l'écriture:

  7. #7
    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,

    Il faut bien comprendre que le pointeur est, quelque part, un "type" en lui-même.

    En effet, ca permet de déclarer une variable qui va contenir... l'adresse à laquelle on trouvera (normalement) effectivement la valeur souhaitée.

    Ce "type", bien que ce n'en soit pas réellement un, dispose d'une taille précise et connue qui correspond à un nombre de bits suffisant pour représenter l'ensemble des adresses mémoire accessibles.

    Que tu place, dans la déclaration d'une variable de type "pointeur vers..." ou de type "pointeur de pointeur vers...", l'étoile (les étoiles) juste à coté du type en question ou juste à coté de l'identifiant de la variable n'a en définitive aucune importance et tient de l'habitude personnelle.

    Ce qui importe, c'est que, quand tu déclare une variable sous la forme
    tu déclare tab comme étant une variable représentant l'adresse mémoire à laquelle l'ordinateur trouvera(normalement)... l'adresse mémoire où il trouvera un double.

    Tu peux donc demander à l'ordinateur d'allouer dynamiquement de la mémoire pour représenter un nombre (sensiblement) quelconque de... pointeurs sur des double, sous la forme de
    Ensuite, tu pourra demander à l'ordinateur d'allouer, pour chaque pointeur sur des double, la mémoire suffisante pour y placer un (autre) nombre (sensiblement) quelconque de double sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for(int i = 0;i<X;++i)
        tab[i] = new double[Y];
    où y représente le nombre, éventuellement calculé, de double dont tu veux disposer de manière contigue

    Maintenant, si tu sais très bien qu'il te faudra disposer de X pointeurs vers double, et que ce nombre est "ferme et définitif" (que tu ne devra jamais décider d'en avoir X+1), tu peux demander à ce que l'ordinateur réserve la mémoire suffisante de manière non dynamique, sous la forme de
    ce qui revient à lui demander de "créer un tableau dans lequel je trouverai X pointeur sur des double contigus en mémoire", tableau que tu pourra ensuite initialiser avec... les adresses auxquels trouver des... tableaux de double sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for(int i = 0;i<X;++i)
        tab[i] = new double[Y];
    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

  8. #8
    Membre éprouvé
    Inscrit en
    Novembre 2006
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par défaut
    merci pour ta rep

    Toujours dans les pointeurs/adresses, quand je lis la valeurs d'un tableau dans la fenetre variable locale, je lis par ex:
    0x00284cb0

    je sais que c'est de l'hexa, mais si on le transforme en entier normal, cela contient quoi comme information?
    est-ce que 0x00284cb1 sera la case suivante?

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Par défaut
    Citation Envoyé par deubelte Voir le message
    merci pour ta rep

    Toujours dans les pointeurs/adresses, quand je lis la valeurs d'un tableau dans la fenetre variable locale, je lis par ex:
    0x00284cb0

    je sais que c'est de l'hexa, mais si on le transforme en entier normal, cela contient quoi comme information?
    est-ce que 0x00284cb1 sera la case suivante?
    C'est l'adresse en mémoire du pointeur. Dans le cas d'un tableau, les éléments sont stockés dans un espace contigu de la mémoire, donc oui si 0x00284cb0 est la n-ième case alors 0x00284cb1 sera la (n+1)-ième case.

    C'est ce qui fait qu'un accès aléatoire dans un tableau a un coût constant, si tu veux le 35ème élément il suffit de rajouter 34 à l'adresse du premier. Il y a une arithmétique des pointeurs qui te permet diverses opérations, intéressant pour travailler sur des tableaux.

Discussions similaires

  1. [Langage] question bête a propos des enum
    Par gronaze dans le forum Langage
    Réponses: 7
    Dernier message: 06/10/2008, 19h38
  2. [langage] question sur tableau
    Par vince2005 dans le forum Langage
    Réponses: 1
    Dernier message: 24/10/2006, 14h12
  3. [langage]question expression reguliere
    Par Fabouney dans le forum Langage
    Réponses: 13
    Dernier message: 27/06/2005, 01h48
  4. [langage] Question débutant compilation PERL
    Par sebbyoguard dans le forum Langage
    Réponses: 5
    Dernier message: 04/09/2004, 19h39
  5. [langage] pb de question reponse
    Par And_the_problem_is dans le forum Langage
    Réponses: 2
    Dernier message: 29/11/2002, 11h59

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