rappel sur une union ?

rappel sur une union ? - C - Programmation

Marsh Posté le 26-06-2003 à 10:03:27    

Bonjour !
Je suis en train de lire du code C et j ai un oubli sur ce que c 'est exactement une union !
Quelqu un pourrait il la definir precisement ?
 
MErci

Reply

Marsh Posté le 26-06-2003 à 10:03:27   

Reply

Marsh Posté le 26-06-2003 à 10:07:38    

Reply

Marsh Posté le 26-06-2003 à 10:08:35    

Une union te permet de stocker plusieurs types de donnée dans une même variable.
 
Par exemple:

Code :
  1. union toto
  2. {
  3.   char c;
  4.   int  i;
  5. } x;


 
Te permet de stocher un char ou un int dans x.


---------------
Le Tyran
Reply

Marsh Posté le 26-06-2003 à 10:10:25    

une union est une zone mémoire qui ne peut contenir qu'une seule variable à la fois.
 
exemple :
 

Code :
  1. union test
  2. {
  3.    int entier;
  4.    float flottant;
  5. } toto;


 
tu ne pourras utiliser qu'un seul champ à la fois de cette union. ainsi, tu ne pourras jamais écrire :
 

Code :
  1. toto.entier=4;
  2. toto.flottant = 4.0;


 
la taille d'une union correspond à la taille de son plus grand champ


Message édité par Harkonnen le 26-06-2003 à 10:11:17

---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 26-06-2003 à 10:12:32    

Pour du service rapide c est du service rapide
Merci ca repond pile poil a ma question :hello:  

Reply

Marsh Posté le 26-06-2003 à 11:56:31    

Harkonnen a écrit :


tu ne pourras utiliser qu'un seul champ à la fois de cette union. ainsi, tu ne pourras jamais écrire :
 

Code :
  1. toto.entier=4;
  2. toto.flottant = 4.0;




 
:heink: tu peux préciser STP ?


---------------
last.fm
Reply

Marsh Posté le 26-06-2003 à 11:59:48    

theShOcKwAvE a écrit :


 
:heink: tu peux préciser STP ?


ben dans mon exemple, quand tu affecteras la valeur 4.0 à toto.flottant, la variable toto.entier n'existera plus et sera écrasée par toto.flottant [:sinclaire]

Reply

Marsh Posté le 26-06-2003 à 12:04:09    

Harkonnen a écrit :


ben dans mon exemple, quand tu affecteras la valeur 4.0 à toto.flottant, la variable toto.entier n'existera plus et sera écrasée par toto.flottant [:sinclaire]


 
ouais, ce sera écrasé, mais tu as le droit de le faire quoi ... C'est juste qu'il faut bien faire attention à la manière dont on s'en sert ...
 
EDIT : et encore ... Ton int, il aura une valeur à la con, mais il sera utilisable ...


Message édité par theshockwave le 26-06-2003 à 12:04:58

---------------
last.fm
Reply

Marsh Posté le 26-06-2003 à 12:07:39    

theShOcKwAvE a écrit :


 
ouais, ce sera écrasé, mais tu as le droit de le faire quoi ... C'est juste qu'il faut bien faire attention à la manière dont on s'en sert ...
 
EDIT : et encore ... Ton int, il aura une valeur à la con, mais il sera utilisable ...


oui, j'ai le droit de le faire, mais c'est le principe de l'union : utiliser une seule variable à la fois
en analogie objet, on pourrait comparer ça à la surcharge : tu surcharges une variable

Reply

Marsh Posté le 26-06-2003 à 12:41:03    

Harkonnen a écrit :


oui, j'ai le droit de le faire, mais c'est le principe de l'union : utiliser une seule variable à la fois
en analogie objet, on pourrait comparer ça à la surcharge : tu surcharges une variable


 
C plus comparable au polymorphisme


---------------
Le Tyran
Reply

Marsh Posté le 26-06-2003 à 12:41:03   

Reply

Marsh Posté le 26-06-2003 à 12:54:00    

Code :
  1. typedef struct {
  2.   union {
  3.     struct {
  4.       unsigned b : 5;
  5.       unsigned g : 5;
  6.       unsigned r : 5;
  7.     };
  8.     unsigned rgb : 15;
  9.   };
  10.   unsigned a : 1;
  11. } SPixel5551;


 
[:pitouxm]
 
une petite union où on peut avoir besoin de se servir des 2, car les données se recouvrent sans se gêner ... Ca permet 2 utilisations qui proposent chacune leur facilité, suivant les cas ...
 
Edit : évidemment, ca perd son intérêt si on ne peut pas utiliser d'union et de structures anonymes ....


Message édité par theshockwave le 26-06-2003 à 12:55:11

---------------
last.fm
Reply

Marsh Posté le 26-06-2003 à 13:51:59    

LetoII a écrit :


 
C plus comparable au polymorphisme

très juste, étant donné qu'une seule instance existe en mémoire à l'instant T :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed