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 :

Difference entre ces 3 notations


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 27
    Par défaut Difference entre ces 3 notations
    Bonjour

    J'aimerai comprendre la différence existant entre ces 3 notations que je rencontre de temps a autre...

    char *p;
    char* p;
    toto * p;

    Ce que je crois avoir compris..
    char *p definit p comme pointeur ( et *p est un caractere..)
    char* p...La je ne suis pas sur !!!
    toto * p Je crois, p pointe sur une fonction ( pas sur...)

    J'ai lu pas mal de documents mais n'arrive pas a me faire une idée definitive
    Merci pour un eventuel coup de main

  2. #2
    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 : 62
    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
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char *p;
    char* p;
    Ces 2 écritures sont STRICTEMENT équivalentes et aussi équivalentes à
    C'est uniquement une histoire de goût d'écriture personnelle




    La seule chose que l'on puisse dire à ce niveau et sans autre code, c'est que p est un pointeur sur un truc qui s'appelle toto.

    Citation Envoyé par alcofribas Voir le message
    Je crois, p pointe sur une fonction ( pas sur...)
    Pas forcemment, il n'y a pas suffisemment de code dans ce que tu présentes pour être affirmatif.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Expert confirmé
    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
    Par défaut
    Et pour compléter les différentes possibilités, tu peux aussi écrire (mais c'est moins lisible et peu usité)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 27
    Par défaut
    Ah grand merci les gars....
    je cherchais la petite bete inutilement !!!
    maintenatn, je vais pouvoir me concentrer sur le vrai probleme

  5. #5
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Goût personnel et/ou habitudes...

    La notation "char* p" est plus dans l'esprit d'un langage comme Pascal : on définit une variable "p", de type "pointeur sur char".
    La notation "char *p" serait plus dans l'esprit assembleur : on définit une indirection vers un type "char".

    Après, le compilateur ne voit effectivement aucune différence entre les deux notations, c'est juste que chaque développeur utilise celle qu'il préfère. Pour ma part, je préfère très nettement la première forme, bien qu'il m'arrive aussi d'utiliser la seconde dans les signatures de fonction pour "marquer" (si l'on peut dire...) que c'est une référence plutôt qu'un simple pointeur. Ceci étant dit, ça n'aide que moi, vu que ça n'a aucun impact sur le code produit.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  6. #6
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    La difference de notation intervient quand on fait ceci :

    char *p, a ,b;

    Un pointeur vers char et deux char.

    char* p, a, b;

    trois pointeur de type char.

    Cependant, je confond toujours
    Est-ce que cela est bon ?

  7. #7
    Membre émérite Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Par défaut
    Citation Envoyé par SofEvans Voir le message
    char* p, a, b;

    trois pointeur de type char.

    Cependant, je confond toujours
    Est-ce que cela est bon ?
    Non, seul p est un pointeur.

  8. #8
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut
    Citation Envoyé par ssmario2 Voir le message
    Non, seul p est un pointeur.
    Donc, j'ai inverser ?

    char *p, a, b;
    trois pointeur de type char

    char* p, a, b;
    Un pointeur vers char et deux char.


    Ca c'est bon ou alors il n'y a aucune difference entre les deux ecriture ?

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 398
    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 398
    Par défaut
    Dans tous les cas, seul p est un pointeur:
    Il n'y a aucune différence entre les deux écritures, si ce n'est que la seconde est plus trompeuse sur ce point.
    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.

  10. #10
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    Citation Envoyé par SofEvans Voir le message
    Ca c'est bon ou alors il n'y a aucune difference entre les deux ecriture ?
    Il n'y a aucune différence entre les deux notations, mais c'est faux.

    Ta notation est équivalente à celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char* p ;
    char a ;
    char b ;
    Pour définir trois pointeurs sur char en une seule ligne, il FAUT écrire :Autre solution, un typedef :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    typedef char* PCHAR ;
     
    PCHAR p, a, b ;
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  11. #11
    Membre émérite Avatar de SofEvans
    Homme Profil pro
    Développeur C
    Inscrit en
    Mars 2009
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 084
    Par défaut


    J'ai toujours etait persuader que c'etait different ...

    Bon, ben c'est une bonne chose d'apprise.

    Merci beaucoup.

  12. #12
    Expert confirmé
    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
    Par défaut
    C'est lié à la philosophie utilisée par le C pour déclarer les types composites : On se ramène à un type simple à partir des opérateurs.

    Pour dire que p est un pointeur sur char, il faut écrire que *p est un char (en accord avec la définition de l'opérateur unaire * de déréférencement). Alors, de la même façon qu'on peut énumérer des variables de type simple comme
    char a,b,c ;
    on écrira pour trois pointeurs
    char *a,*b,*c;

    Cette philosophie s'applique aux tableaux : pour dire que tab est un tableau de char, on écrira qu'un élément de tab , tab[], est un char, (en accord avec la définition de l'opérateur []) soit char tab[...].

    On écrira par exemple
    char a,*b,c[...];
    pour définir un char, un pointeur sur char et un tableau de char

    Cette manière de voir les choses du C explique l'écriture parfois très ésotérique des types "compliqués"

Discussions similaires

  1. Différences entre Delphi et Visual Basic ?
    Par Anonymous dans le forum Débats sur le développement - Le Best Of
    Réponses: 75
    Dernier message: 30/03/2009, 20h09
  2. Réponses: 4
    Dernier message: 27/07/2007, 16h39
  3. Difference entre ces 2 manieres d'instancier.
    Par Mobistar dans le forum Langage
    Réponses: 6
    Dernier message: 09/07/2007, 11h25
  4. [] Difference entre MSHFlexGrid et MSFlexGrid
    Par olivierx dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 23/04/2003, 08h48
  5. Difference entre types d'Adresse IP
    Par freud dans le forum Développement
    Réponses: 3
    Dernier message: 02/03/2003, 02h06

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