L'essentiel du langage C

Utiliser les unions en C

Testez gratuitement nos 1271 formations

pendant 10 jours !

Tester maintenant Afficher tous les abonnements
Vous allez découvrir comment déclarer et compléter des unions. Voyez ce qui caractérise une union de membres variables par rapport à une structure.
08:15

Transcription

Je vais vous faire la présentation Donc, la syntaxe des unions est similaire à celle des structures. Vous utilisez le mot clé union qui est un mot donc réservé avec les types et le nom des variables séparés par un point_virgule. Vous finissez avec une accolade fermante et un point-virgule à la fin. Ce qui est tout à fait équivalent à mettre typedef union, nom de l'union, on fait la même chose on type, on nomme, on type on nomme, on ferme. Et là vous pouvez renommer votre union. On l'appelant, par exemple ici, cette_union, point-virgule. Dans le main, dans ce cas là, vous ferez union mon_de_union mon_union. Donc, c'est-à dire que là vous utilisez le mot clé union Vous avez le nom de la structure de l'union. Attention la structure de l'union pas une structurre, j'utilise un mot pour un autre là. Et vous avez le nom déclaré. Et ici, vu que ce nouveau nom a été donné, bah c'est cette_union mon_union, vous n'avez pas besoin de remettre union devant, si vous avez mis le mot clé typedef qui vous évite de renommer encore et encore. Quelles sont les spécifications des unions ? Ce sont les membres de l'union dont la taille est plus grande qui détermine la taille de l'union. Exemple, l'union mon_union, pas de problème, char variable1; // 1 octet, OK. short variable2; // 2 octets, OK. Un float, 4 octets, très bien. Taille de l'union 4 octets ah différent de la taille d'une structure. En effet, là on ne fait pas la somme des octets, mais on prend simplement la valeur la plus grande, la variable qui occupe le plus d'espace mémoire on compte, à l'intérieur de l'union. Tous les membres d'union ont la même adresse. Ce qui est totalement différent de la structure. Alors par exemple, char variable1 va être 1 octet et puis à une adresse que j'ai mis au hasard, cette fois, 320 et elle commence ici. Pour mon short, elle va commencer ici et elle va continuer ici. Et puis, pour mon float elle va commencer à la même adresse et elle va se finir ici. Donc, vous imaginez bien que dans une union, comme pareil à une structure, vous ne pourrez pas utiliser tous les éléments de l'union. En fait là, on est sur un regroupement de variables et non pas sur une déclaration séparée des variables parce que là ils sont en train de se se patiner. Dans la structure, chacun dort chez-soi. On a une adresse pour chacune des variables 2 octets alloués, 2 octets alloués. 4 octets alloués. Ok, et on met le tous les uns à la suite des autres. Et on arrive à 7 octets. Maintenant, nous allons passer toute de suite à la pratique et vous vous montrez à quoi peut servir une union. Je veux avoir besoin de la bibliothèque standard None qui va me permettre d'effectuer le trensfert d'une chaine de caractères vers un élément d'une union. Donc, j'utilise typedef union pour me passer du mot union et je nomme ossature CetteUnion. A l'intérieur de cette union, je vais y mettre un char, un short et un tableau de char constitué de dix éléments. Donc, l'espace reservé, théoriquement est de 1, 2 et 10 octets. Donc, je renomme une nouvelle fois, cette union par UnionDeVariables. Et puis, puisque UnionDeVariables ne vaut pas, bah je redéfinie encore une fois, MonUnionDeVariables Tout ceci pour vous dire que c'est la même chose que pour les structures et que si vous voulez l'utiliser, en fait, cette ossature d'union et qu'elle puisse être un peu générique à plusieurs de vos programmes. qui sont dans le même projet, attention ah ! Vous pouvez très bien la renommer, à chaque fois, par un nom différent, c'est ce que je viens de faire sauf que là je ne l'utilise pas, pour faire autre chose de façon à faire un programme qui ne soit pas trop lourd. Donc, je vais initialiser au même type que les structures, les différents membres de mon union. MonUnionDeVariables.ma_variable_char je vais mettre V, mon short, par exemple, je mets 26966. Et puis, dans mon tableau de 10 éléments, cette fois-ci, je vais utiliser la fonction strcpy(), donc, comme je le disait auparavant héritée de None qui est l'une des bibliothèques standard du C. Alors là, j'ai ma petite phrase d'introduction Et puis ici, on s'attend à avoir donc un caractère pour le type char, pour le type short un décimal et puis pour mon_tableau, donc une chaîne de caractères. On vérifie après les adresses des membres qui ont été affectés Donc, je change un petit peu, en fait, le format d'affichage hexadécimal de chacun des éléments. simplement pour dire de varier aussi et toujours essayer de se souvenir de différents syntaxes donc %X %p comme pointeur, mais ce n'est pas grave, ça va juste changer comme je vous le disait, l'affichage et puis à la fin, nous allons vérifier que la mémoire allouée est la bonne, donc, pour ça, nous allons utiliser le sizeof(), nous allons voir qu'elle est la taille de l'union. Et puis après, nous allons voir, en fait, sizeof() pour notre variable_char pour notre variable_short et pour le tableau de char qui est constitué de 10 éléments Et si je ne vous ai pas menti normalement, vous allez voir que l'union MonUnionDeVariables ici a pour taille la taille du plus grand des éléments à savoir ici le tableau. Vérifions tout ceci avec l'exécution du programme. Et passons en parallèle ici, on va vérifier directement voici les élément constituant l'union, on regarde. Donc, on a bien initialisé à V, il n'y a pas de soucis. Donc 26966, très bien. Nous avons bien initialisé notre tableau de char de 10 éléments de Vive les unions Vérification des adresses donc forcément avec des formats un petit peu différent, mais c'est fait exprès. Donc, des adresses que là je rappelle à chaque fois, qui ne sont propres à la compilation parcequ'elles dépendent de l'OS et du nom du programme que j'ai installé à l'intérieur. Et donc là, le compilateur a alloué, en fait, les adresses qui sont exactement les mêmes OUPS... tous les membres ont la même Donc, ça veut dire que vous allez écraser, en fait, des données si vous venez à dépasser en fait, les dix éléments qui sont ici, donc, vous voyez que la taille mémoire allouée par l'union est de 10 ça tombe bien ça correspond en fait, à la taille allouée par le tableau qui est de 10 aussi. A char, on retrouve 1 octet. Et puis à short 2 octets.

L'essentiel du langage C

Comprenez les concepts de base du langage C. Développez de simples applications en mode console, afin de comprendre les rouages d’un des langages les plus utilisés au monde.

7h51 (98 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :12 janv. 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !