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 C et Caml pour opérateurs & et *


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 84
    Par défaut Différence C et Caml pour opérateurs & et *
    Bonjour,
    je suis en train d'apprendre le langage C et j'ai un peu de mal à comprendre les opérateurs de référencement & et de déréférencement *.
    Je connais Caml. Est-ce que:
    *x = 3 est équivalent à x:= 3 (et donc *x sous-entend que x est de type int ref)
    void fonction (int a, int x) est équivalent à let fonction (a:int b: int ref)
    &x est équivalent à !x ?
    Merci.

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    int i; est un int.
    int * ptr; est un pointeur sur un int.

    &i; est l'adresse de la variable i.
    &ptr; est l'adresse de la variable ptr.

    ptr = &i; met dans ptr l'adresse de la variable i (ptr pointera donc sur i).
    *ptr est la variable surlaquelle pointe ptr (ici i).
    Donc *ptr = 3 équivaut à i = 3 c'est à dire qu'on met dans i la valeur 3.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 84
    Par défaut
    Rebonjour,
    je comprends la logique de votre réponse, malheureusement nous n'avons pas encore abordé le cours sur les pointeurs... le parallèle que j'ai fait avec Caml reste-t-il juste?
    Merci

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Je ne connais pas Caml.

    Un pointeur est une variable comme une autre mais qui contient l'adresse d'une autre variable.
    On peut accéder à la variable pointé grâce à l'opérateur * monPointeur
    On peut avoir l'adresse d'une variable grâce à l'opérateur & maVariable

    Ainsi on peut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int i, j *ptr;
    ptr = &i; *ptr = 2; // i = 2
    ptr = &j; *ptr = 3; //j = 3
    i = *ptr;   //i = j
     
    printf("%p\n%p", ptr, &j);//affiche l'adresse de la variable pointé par ptr et l'adresse de la variable j

  5. #5
    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
    Le parallète avec caml n'est pas mauvais, mais biaisé.
    En caml, les symboles ne sont pas modifiables, à moins d'être une référence.

    En caml, "let n = 2 in ..." défini une constante nommée n, contenant 2.
    En C, "int n = 2;" crée une variable, modifiable, nommée n, et initialisé par la valeur 2.
    En C, "int *p;" déclare une variable (modifiable), nommée p, dont le contenu est du type "adresse de int", c'est à dire, p est un pointeur d'entier

    Dans une expression, l'étoile * va chercher la valeur contenue dans la mémoire à l'adresse qui est la valeur de la variable.

    Attention, dans une déclaration, elle sert à dire "ce qui est pointée par cette variable est du type annoncé".
    Cette formulation aide à comprendre pourquoi int *a, b; déclare un "pointeur de int" (a) et un "int" (b). l'étoile est toujours lue comme associée à la variable.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 84
    Par défaut
    (avec du retard)
    C'est bon, j'ai compris!
    Merci!

Discussions similaires

  1. différence IE et FF pour soulignement d'un lien
    Par Stéph utilisateur d'acces dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 12/01/2009, 19h26
  2. Différence LDAP et WINT pour manipuler Active Directory
    Par undercrash dans le forum VBScript
    Réponses: 0
    Dernier message: 03/04/2008, 15h56
  3. Différence encodage Win / Unix pour XML
    Par kij dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 27/12/2007, 11h18
  4. Réponses: 2
    Dernier message: 12/01/2006, 10h28

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