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 :

Explication syntaxique affectation


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Explication syntaxique affectation
    Bonjour, merci de prendre quelques minutes pour me répondre.
    Cela va paraitre être une question bête mais j'ai du mal à voir ce que cela produit en mémoire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    char * buf; // cree un pointeur pour un futur tableau
    struct rectangle *rect; // sachant qu'on aura qu'un 1 rectangle
    buf = calloc(512,1); // cree le tableau de taille 512
    // c'est la synthaxe qui suit que je n'arrive pas trop à comprendre
    rect = (struct rectangle *) buf;
    personnellement, je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    char * buf; // cree un pointeur pour un futur tableau
    struct rectangle rect; 
    buf = calloc(512,1); // cree le tableau de taille 512
    memcpy(buf, &rect, sizeof(rect)); // qui me permet de copier le contenu de rect dans mon buf.
    pouvez vous m'expliquer la synthaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rect = (struct rectangle *) buf;
    je n'arrive pas trop à comprendre, si il y a une référence sur le site, je veux bien lire

    merci d'avance.

  2. #2
    Membre éclairé
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 473
    Points : 831
    Points
    831
    Par défaut
    Bonjour Pam76

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rect = (struct rectangle *) buf;
    Dans ce cas, rect et buf sont tous les deux des pointeurs, le premier sur une structure de type rectangle, le deuxième sur un char.

    Avec le calloc buf, va pointer sur une zone mémoire de 512 octets, et avec cette assignation, rect va pointer aussi que la même zone.

    Il faut que tu vois les pointeur comme de simple variables contenant des adresses. les deux pointeur pointeront donc sur la même adresse

    Le typage du pointeur ne sert qu'a définir le type de donnée pointée, mais une adresse quelque soit le pointeur reste une adresse.

    j'espère que c'est plus clair


    j'espère que c'est plus clair
    Page sur Developpez : http://pbriand.developpez.com

  3. #3
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rect = (struct rectangle *) buf;
    (struct rectangle *) buf est un transtypage (ou cast). Un cast consiste à changer une valeur en une valeur d'un autre type (on ne peut pas changer le type d'un objet).

    buf et (struct rectangle *) buf repère la même position mémoire, mais

    - buf est l'adresse d'un char (c'est à dire que *buf est un char)

    -(struct rectangle *) buf; est l'adresse d'un struct rectangle (donc *(struct rectangle *) buf est un struct rectangle).

    Il s'agit en fait de faire passer le tableau de char pour un tableau de struct rectangle.
    Cette adresse est ensuite rangée dans le pointeur rect.
    En aucun cas il n'y a copie du contenu des adresses (comme dans ton exemple avec le memcpy())

    Le cast est une action sauvage et dangereuse et il faut l'utiliser uniquement si c'est nécessaire et vérifier ce qu'on fait à chaque fois qu'on l'utilise.
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

Discussions similaires

  1. Coloration syntaxique ASM dans un RichEdit
    Par Crick dans le forum Composants VCL
    Réponses: 5
    Dernier message: 20/12/2002, 01h53
  2. [MaskEditBox] Affecter avec un réel
    Par fikou dans le forum Général VBA
    Réponses: 6
    Dernier message: 16/09/2002, 09h28
  3. Explication procédure stockée
    Par underworld dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 09/09/2002, 10h51
  4. Recherche code d'un fifo,ou explication
    Par don-diego dans le forum C
    Réponses: 8
    Dernier message: 25/07/2002, 10h26
  5. recherches des cours ou des explications sur les algorithmes
    Par Marcus2211 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 19/05/2002, 22h18

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