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.
Partager