Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Struct et Union Anonymes | Utilisation Avancée des Structs
Maîtriser les Structs en C

bookStruct et Union Anonymes

Le langage de programmation C propose des structures anonymes et des unions anonymes, permettant de définir des structures et des unions sans spécifier de nom.

Que sont les structures et unions anonymes ?

Une union anonyme ou une structure anonyme ne possède pas d'identifiant. Par conséquent, il n'est pas possible de créer des variables autonomes de ce type ; elles sont généralement utilisées à l'intérieur d'autres structures.

// Anonymous union
union {
    char x;
    int y;
};

// Anonymous structure
struct {
    char x;
    int y;
};

Les structs et unions anonymes sont particulièrement utiles lorsqu'ils sont imbriqués et ne seront utilisés que dans le contexte où ils sont déclarés.

Exemple pratique

Considérez un scénario où vous souhaitez représenter une table ASCII dans laquelle une même valeur peut être interprétée comme un code numérique ou comme un symbole de caractère. L'utilisation d'une union anonyme à l'intérieur d'une structure permet de basculer efficacement entre ces deux interprétations.

main.c

main.c

copy
123456789101112131415161718192021
#include <stdio.h> struct ASCIItable { // Anonymous union allows dual representation of the same memory union { char symbol; int num; }; }; int main() { struct ASCIItable AZtable; AZtable.num = 65; // ASCII code for 'A' // Print all uppercase letters and their numeric codes for (int i = 0; i < 26; i++) { printf("num = %d | symbol = `%c`\n", AZtable.num + i, AZtable.symbol + i); } return 0; }

Dans cet exemple, la structure ASCIItable contient une union anonyme. L'union permet d'interpréter la même zone mémoire soit comme une valeur numérique (num), soit comme un caractère (symbol).

Lorsque AZtable.num est défini à 65, cela correspond au code ASCII de 'A'. En utilisant la même mémoire, AZtable.symbol représente également 'A'. En itérant 26 fois, il est possible d'afficher toutes les lettres majuscules avec leurs codes ASCII, illustrant ainsi comment la même mémoire peut offrir plusieurs représentations des données.

Tâche

Swipe to start coding

Créer une fonction findFurthestPoint qui identifie le point le plus éloigné de l'origine (0,0) dans un plan 2D. Chaque point est représenté par une structure Point contenant une structure imbriquée anonyme avec les champs x et y.

La fonction doit calculer la distance euclidienne pour chaque point en utilisant la formule :

distance = sqrt(x*x + y*y)

et retourner l'indice du point ayant la distance maximale.

  1. À l'intérieur de la fonction, calculer la distance du premier point à l'origine à l'aide de la formule.
  2. Initialiser maxIndex à 0.
  3. Utiliser une boucle for de i = 1 à i = n pour parcourir les points.
  4. Pour chaque point, calculer sa distance en utilisant la formule ci-dessus.
  5. Si la distance est supérieure à maxDistance, mettre à jour maxDistance et maxIndex avec la distance et l'indice du point courant.
  6. Après la boucle, retourner maxIndex comme indice du point le plus éloigné.

Solution

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 3
single

single

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

close

bookStruct et Union Anonymes

Glissez pour afficher le menu

Le langage de programmation C propose des structures anonymes et des unions anonymes, permettant de définir des structures et des unions sans spécifier de nom.

Que sont les structures et unions anonymes ?

Une union anonyme ou une structure anonyme ne possède pas d'identifiant. Par conséquent, il n'est pas possible de créer des variables autonomes de ce type ; elles sont généralement utilisées à l'intérieur d'autres structures.

// Anonymous union
union {
    char x;
    int y;
};

// Anonymous structure
struct {
    char x;
    int y;
};

Les structs et unions anonymes sont particulièrement utiles lorsqu'ils sont imbriqués et ne seront utilisés que dans le contexte où ils sont déclarés.

Exemple pratique

Considérez un scénario où vous souhaitez représenter une table ASCII dans laquelle une même valeur peut être interprétée comme un code numérique ou comme un symbole de caractère. L'utilisation d'une union anonyme à l'intérieur d'une structure permet de basculer efficacement entre ces deux interprétations.

main.c

main.c

copy
123456789101112131415161718192021
#include <stdio.h> struct ASCIItable { // Anonymous union allows dual representation of the same memory union { char symbol; int num; }; }; int main() { struct ASCIItable AZtable; AZtable.num = 65; // ASCII code for 'A' // Print all uppercase letters and their numeric codes for (int i = 0; i < 26; i++) { printf("num = %d | symbol = `%c`\n", AZtable.num + i, AZtable.symbol + i); } return 0; }

Dans cet exemple, la structure ASCIItable contient une union anonyme. L'union permet d'interpréter la même zone mémoire soit comme une valeur numérique (num), soit comme un caractère (symbol).

Lorsque AZtable.num est défini à 65, cela correspond au code ASCII de 'A'. En utilisant la même mémoire, AZtable.symbol représente également 'A'. En itérant 26 fois, il est possible d'afficher toutes les lettres majuscules avec leurs codes ASCII, illustrant ainsi comment la même mémoire peut offrir plusieurs représentations des données.

Tâche

Swipe to start coding

Créer une fonction findFurthestPoint qui identifie le point le plus éloigné de l'origine (0,0) dans un plan 2D. Chaque point est représenté par une structure Point contenant une structure imbriquée anonyme avec les champs x et y.

La fonction doit calculer la distance euclidienne pour chaque point en utilisant la formule :

distance = sqrt(x*x + y*y)

et retourner l'indice du point ayant la distance maximale.

  1. À l'intérieur de la fonction, calculer la distance du premier point à l'origine à l'aide de la formule.
  2. Initialiser maxIndex à 0.
  3. Utiliser une boucle for de i = 1 à i = n pour parcourir les points.
  4. Pour chaque point, calculer sa distance en utilisant la formule ci-dessus.
  5. Si la distance est supérieure à maxDistance, mettre à jour maxDistance et maxIndex avec la distance et l'indice du point courant.
  6. Après la boucle, retourner maxIndex comme indice du point le plus éloigné.

Solution

Switch to desktopPassez à un bureau pour une pratique réelleContinuez d'où vous êtes en utilisant l'une des options ci-dessous
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 3
single

single

some-alt