Cours 12.2. Propriétés des structures en C

Affectation des structures

Il est possible d’affecter une structure dans sa globalité :

structure_A = structure_B ;

Le code ci-dessus recopie tous les champs de structure_B dans structure_A.

Comparaison de structures

Il n'est pas possible de comparer deux structures avec l'opérateur ==.

// NE COMPARE PAS LES STRUCTURES
if (structure_A == structure_B)...

Pour tester si deux structures sont identiques, il faut tester chaque champ individuellement.

Portée des structures

La portée des structure est identique aux variables :

Taille d'une structure

Il est possible de connaître la taille d'une structure en mémoire grâce à l'instruction sizeof(). Attention, la taille d'une structure n'est pas toujours égale à la somme de la taille de ses champs. Sans rentrer dans les détails, l'alignement mémoire permet d'augmenter la vitesse d'exécution.

Exercices

Exercice 1

Créer une structure vector qui contient 3 champs à double précision x, y et z. Créer une variable v de type structure et afficher la taille

Voici la sortie escomptée :

Taille de struct vector : 24 octets
Taille de la variable v : 24 octets
Taille de v.x : 8 octets
Taille de v.y : 8 octets
Taille de v.z : 8 octets

Exercice 2

On fournit la structure circle ci-dessous :

struct circle {
  int cx,cy;      // Centre
  double radius;  // Rayon 
};

Déclarer une variable C1 pour un cercle de centre (2,4) et de rayon 2,5. Copiez le cercle dans une nouvelle variable C2 préalablement déclarée.

Vérifiez que la copie s'est correctement déroulée (C1 égal C2) et que les variables C1 et C2 on bien deux adresses distinctes :

Cercle C1 de rayon 2.50 et de centre (2,4)
Cercle C2 de rayon 2.50 et de centre (2,4)
Les structures sont bien identiques
Adresse de C1 : 0x7ffe15de74d8
Adresse de C2 : 0x7ffe15de74c8

Quiz

Pour copier une variable de type structure dans une autre ...

Vérifier Bravo ! Il suffit d'utiliser l'opérateur =, mais on peut aussi affecter les champs un par un. Essaie encore ...

Pour vérifier que des variables de type structure sont identiques ...

Vérifier Bravo ! L'opérateur == ne fonctionne pas sur les structures, il faut comparer les champs individuellement. Toutefois, ici, il faudra dans tous les cas 16 octets minimum. Essaie encore ...

Quelle est la taille de la structure ci-dessous ?

// Structure circle
struct circle {
  int cx,cy;      // Centre
  double radius;  // Rayon 
};
Vérifier Bravo ! La taille d'une structure n'est pas forcement égale à la somme de la taille de ses champs. Essaie encore ...

Voir aussi


Dernière mise à jour : 01/12/2022