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 :

Diff�rence entre char &r='c' et char r='c'


Sujet :

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 Diff�rence entre char &r='c' et char r='c'
    Bonjour
    J'ai une question concernant le code suivant:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    void main(){
       char const rc3='e';  char x('k');char fr('r');
        char &rc2=x; 
     
     
    }
    Je ne connaissais pas la facon de d�clarer: x('k'), mais elle semble totalement �quivalente � cette facon de d�clarer:
    x='k';

    Ensuite, on a : char &rc2=x;

    Mais surtout : quelle est la diff�rence entre char &rc2=x; et char rc2=x;
    rc2 est dans les deux cas, non pas un pointeur sur char mais un char. Mais zalors, a quoi sert &?

    Merci

  2. #2
    Membre �clair�
    Inscrit en
    Avril 2005
    Messages
    1 110
    D�tails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 110
    Par d�faut
    Citation Envoy� par deubelte Voir le message
    Bonjour
    J'ai une question concernant le code suivant:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    void main(){
       char const rc3='e';  char x('k');char fr('r');
        char &rc2=x; 
     
     
    }
    Je ne connaissais pas la facon de d�clarer: x('k'), mais elle semble totalement �quivalente � cette facon de d�clarer:
    x='k';
    Oui.

    Citation Envoy� par deubelte Voir le message
    Ensuite, on a : char &rc2=x;

    Mais surtout : quelle est la diff�rence entre char &rc2=x; et char rc2=x;
    rc2 est dans les deux cas, non pas un pointeur sur char mais un char. Mais zalors, a quoi sert &?

    Merci
    La nuance est fondamentale. Pas de C++ sans comprendre.
    Avec le "&" rc2 est une r�f�rence sur x, c'est � dire que c'est la "m�me variable", alors que sans le "&" rc2 est une autre variable qui va prendre la valeur de x lors de son initialisation.

    En pratique, pour le compilateur une r�f�rence est un pointeur.

  3. #3
    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, mais un pointeur n'est pas du tout une r�f�rence, c'est une adresse?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par d�faut
    Exactement ! Un pointeur est une variable qui va contenir une adresse vers une plage m�moire. La traduction en langage machine est naturelle.

    Une r�f�rence est une notion qui n'a lieu que dans le code C++ et se retrouve traduite sous forme de pointeur � la compilation.

    Une r�f�rence telle que tu l'utilises dans ton exemple n'est pas vraiment utile. L'utilit� d'une r�f�rence se situe dans les signatures de m�thodes. Exemple (avec des fonctions libres pour all�ger) :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void f(int x){
       x++:
    }
     
    void main(){
       int a = 0;
       f(a);
       std::cout << a << std::endl;
    }
    Ce code va afficher "0" en sortie, a n'est pas modifi�e.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void f(int& x){
       x++:
    }
     
    void main(){
       int a = 0;
       f(a);
       std::cout << a << std::endl;
    }
    Ce code va afficher "1" en sortie, a est modifi�e car la fonction r�cup�re une r�f�rence et pas une copie de la variable.

    Avantages :
    - Le code appelant (dans main) n'est pas modifi� pour rendre a modifiable par la fonction.
    - C'est un pointeur qui est pass� (pas de copie de l'objet en m�moire, bien pour les gros objets).

  5. #5
    Membre �prouv�
    Inscrit en
    Novembre 2006
    Messages
    1 073
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 073
    Par d�faut
    Ok, l'op�ration & revient � cr�er une nouvelle variable � partir de la premi�re, mais ayant la m�me adresse.*
    math�matiquement, peut on dire que & est une relation d'�quivalence,

  6. #6
    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
    Par d�faut
    Citation Envoy� par deubelte Voir le message
    Ok, l'op�ration & revient � cr�er une nouvelle variable � partir de la premi�re, mais ayant la m�me adresse.*
    math�matiquement, peut on dire que & est une relation d'�quivalence,
    Ce n'est pas une op�ration, ce n'est pas une �quivalence. C'est plut�t un synonyme. �a ressemble plus au typedef pour les types.

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par d�faut
    Attention tout de m�me deubelte, la r�f�rence pr�sente des comportements diff�rents dans certains cas. Par exemple, quand la r�f�rence est d�truite et d�pil�e � la fin du bloc dans lequel elle est d�clar�e, l'objet r�f�renc� ne l'est pas.

    D'une mani�re g�n�rale, la r�f�rence est souvent perturbante pour les d�butants en C++ . Bon courage pour la suite.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. diff�rence entre char a[20]="str" et char *a="str"
    Par iBen68 dans le forum D�buter
    R�ponses: 4
    Dernier message: 31/10/2009, 03h22
  2. diff�rence entre int et char
    Par hassiba_45 dans le forum C++
    R�ponses: 4
    Dernier message: 12/06/2008, 21h53
  3. [Free Pascal] Mini-tutoriel : Diff�rence entre char et chr (auto-analyse de code)
    Par Clandestino dans le forum Free Pascal
    R�ponses: 14
    Dernier message: 24/03/2007, 18h18

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