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 :

pointeur et array dans C++


Sujet :

C++

  1. #1
    Membre éclairé Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Par défaut pointeur et array dans C++
    Salut à vous tous. Je débute en C++ et j'ai une question:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <iostream>
    #include<array>
    using namespace std;
     
    int main()
     
    {  
       array<int,5>Xtablo={1,2,3,4,5};
       for(int i(0);i<Xtablo.size();i++)
       {
           cout<<&Xtablo[i]<<endl;
       }
       cout<<" ============ "<<endl;
       for(auto elem:Xtablo)
       {
           cout<<&elem<<endl;
       }
     
        return 0;
    }
    pouquoi les deux boucles "for" ne donnent pas le même résultat ("for auto" donne la même adresse)
    merci à vous

  2. #2
    Membre éprouvé Avatar de KsassPeuk
    Homme Profil pro
    Ingénieur Chercheur
    Inscrit en
    Juillet 2013
    Messages
    138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Chercheur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2013
    Messages : 138
    Par défaut
    Lu'!

    Parce que la deuxième boucle prend une copie de chaque valeur. Si tu veux atteindre la position mémoire dans le tableau, il faut passer par une référence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(auto& elem:Xtablo)
    {
       cout<<&elem<<endl;
    }

  3. #3
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Parce que for(auto e : ...) déclare e comme un auto, c'est à dire le type de l'élément.
    e est une variable temporaire qui sera toujours à la même adresse, et qui sera initialisée (par copie) avec la valeur courante du bidule parcouru.

    Il y a deux autres manière d'utiliser for( :):
    • Avec une référence constante, pour ne pas copier l'objet, sans pour autant le modifier: for(auto const& e : ...)
    • Avec une référence modifiante, pour modifier le contenu de l'objet: for(auto & e : ...)



    Comme l'adresse d'une référence est l'adresse du référé, ces deux solutions permettent donnerait l'adresse de array[i].
    D'ailleurs std::array<...>::operator[] retourne une référence. (constante pour l'opérateur constant, modifiante sinon)

  4. #4
    Membre éclairé Avatar de stracoma
    Homme Profil pro
    Médecin
    Inscrit en
    Août 2013
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Maroc

    Informations professionnelles :
    Activité : Médecin

    Informations forums :
    Inscription : Août 2013
    Messages : 413
    Par défaut
    Ok. bien compris
    Merci

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 26/04/2016, 00h52
  2. Vertex Array dans Display List ?
    Par GruZloR dans le forum OpenGL
    Réponses: 3
    Dernier message: 29/03/2006, 12h55
  3. Réponses: 7
    Dernier message: 04/01/2006, 15h34
  4. [MySQL] Insérer complètement un array dans une base
    Par Anduriel dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 29/12/2005, 19h52
  5. [JS] array dans un appel de fonction
    Par dib258 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 12/10/2005, 13h36

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