Struct 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
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.
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.
- À l'intérieur de la fonction, calculer la distance du premier point à l'origine à l'aide de la formule.
- Initialiser
maxIndexà0. - Utiliser une boucle
fordei = 1ài = npour parcourir les points. - Pour chaque point, calculer sa distance en utilisant la formule ci-dessus.
- Si la distance est supérieure à
maxDistance, mettre à jourmaxDistanceetmaxIndexavec la distance et l'indice du point courant. - Après la boucle, retourner
maxIndexcomme indice du point le plus éloigné.
Solution
Merci pour vos commentaires !
single
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Génial!
Completion taux amélioré à 4.35
Struct 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
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.
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.
- À l'intérieur de la fonction, calculer la distance du premier point à l'origine à l'aide de la formule.
- Initialiser
maxIndexà0. - Utiliser une boucle
fordei = 1ài = npour parcourir les points. - Pour chaque point, calculer sa distance en utilisant la formule ci-dessus.
- Si la distance est supérieure à
maxDistance, mettre à jourmaxDistanceetmaxIndexavec la distance et l'indice du point courant. - Après la boucle, retourner
maxIndexcomme indice du point le plus éloigné.
Solution
Merci pour vos commentaires !
single