Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1027 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C C++] différence entre une struc et union

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C C++] différence entre une struc et union

n°576495
startx25
Posté le 26-11-2003 à 12:10:12  profilanswer
 

désolé mais j'ai du mal a comprendre la différence en union et struct
 
surtout quand utiliser l'un ou l'autre
 
merci de laisser un commentaire :jap:

mood
Publicité
Posté le 26-11-2003 à 12:10:12  profilanswer
 

n°576497
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 26-11-2003 à 12:12:34  profilanswer
 

dans une struct, les champs mémoires sont contigus et il existe une zone mémoire par membre de la struct.
 
dans une union, tu peux avoir autant de membres que tu veux, mais une seule zone mémoire qui sera de la taille de ton plus grand membre.
 
edit: pour être plus clair, une struct peut contenir autant de données que tu veux, mais une union ne peut avoir qu'une seule donnée à la fois, même si tu en déclares plusieurs


Message édité par Harkonnen le 26-11-2003 à 12:13:58
n°576501
cricri_
Posté le 26-11-2003 à 12:17:10  profilanswer
 

Citation :

dans une struct, les champs mémoires sont contigus

Heuuh .. il peut y avoir des "trous" entre les éléments il me semble, non ?

n°576505
Taz
bisounours-codeur
Posté le 26-11-2003 à 12:18:17  profilanswer
 

Cricri_ a écrit :

Citation :

dans une struct, les champs mémoires sont contigus

Heuuh .. il peut y avoir des "trous" entre les éléments il me semble, non ?
 

si il peut y a avoir quelques bourrages

n°576507
Moktar1er
No one replies...
Posté le 26-11-2003 à 12:19:43  profilanswer
 

Cricri_ a écrit :

Citation :

dans une struct, les champs mémoires sont contigus

Heuuh .. il peut y avoir des "trous" entre les éléments il me semble, non ?
 


exact, du "bourrage" pour avoir un nombre pair d'octets.

Code :
  1. typedef struct _toto{
  2. char monChar;
  3. int monInt;
  4. } toto;
  5. sizeof toto = 6
  6. sizeof char + sizeof int = 5

n°576509
Taz
bisounours-codeur
Posté le 26-11-2003 à 12:21:26  profilanswer
 

moktar1er a écrit :


exact, du "bourrage" pour avoir un nombre pair d'octets.

rien à voir

n°576511
Moktar1er
No one replies...
Posté le 26-11-2003 à 12:22:26  profilanswer
 

Taz a écrit :

rien à voir


pourquoi ça fait toujours un nombre pair d'octets alors?

n°576523
startx25
Posté le 26-11-2003 à 12:31:36  profilanswer
 

Harkonnen a écrit :

dans une struct, les champs mémoires sont contigus et il existe une zone mémoire par membre de la struct.
 
dans une union, tu peux avoir autant de membres que tu veux, mais une seule zone mémoire qui sera de la taille de ton plus grand membre.
 
edit: pour être plus clair, une struct peut contenir autant de données que tu veux, mais une union ne peut avoir qu'une seule donnée à la fois, même si tu en déclares plusieurs


 
pas claire pour moi ? (et je vois pas très bien quand utiliser l'un plutot que l'autre)
 

n°576524
Taz
bisounours-codeur
Posté le 26-11-2003 à 12:31:50  profilanswer
 

moktar1er a écrit :


pourquoi ça fait toujours un nombre pair d'octets alors?

rien à voir, c'est pour une question de performance. on a des machines 32bits, il va essayer d'aligner sur 32bits.  
 
gcc
-Wpacked
-Wpadded
-fpack-struct

n°576525
Taz
bisounours-codeur
Posté le 26-11-2003 à 12:33:03  profilanswer
 

ben fait une union et une struct avec la même chose. regarde les tailles de l'union et de la structure, regarde les adresses des memebres

mood
Publicité
Posté le 26-11-2003 à 12:33:03  profilanswer
 

n°576526
Moktar1er
No one replies...
Posté le 26-11-2003 à 12:33:14  profilanswer
 

euh ouais OK ... j'aurais du donner tout le détails de ma pensée ...
pair->multiple de 32 etc. etc.

n°576530
Taz
bisounours-codeur
Posté le 26-11-2003 à 12:34:52  profilanswer
 

moktar1er a écrit :

euh ouais OK ... j'aurais du donner tout le détails de ma pensée ...
pair->multiple de 32 etc. etc.

bref ça depend de ton architecture, les bourrage n'est pas obligatoire, loin de la

n°576533
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 26-11-2003 à 12:37:46  profilanswer
 

startx25 a écrit :


 
pas claire pour moi ? (et je vois pas très bien quand utiliser l'un plutot que l'autre)
 
 


Code :
  1. typedef struct{
  2.    int a;
  3.    int b;
  4.    char c;
  5. }test;


 
ceci réserve suffisamment d'espace mémoire pour les 3 champs. (9 octets dans le cas d'un int de 4 octets). chaque champ sera donc accessible sans problème et aura sa propre valeur.
par contre :
 

Code :
  1. typedef union {
  2.    int a;
  3.    double b;
  4.    char c;
  5. }test;


 
ne réservera que l'espace mémoire nécessaire à un double (type le plus grand de l'union). donc si tu écris ça :
 

Code :
  1. test.b = 1457;


 
ça écrasera la valeur de test.a et test.c, ce qui n'est pas le cas dans une struct

n°576542
nraynaud
lol
Posté le 26-11-2003 à 12:48:55  profilanswer
 

et au sens des types ? ça signifie quoi ?


---------------
trainoo.com, c'est fini
n°576562
Taz
bisounours-codeur
Posté le 26-11-2003 à 13:17:53  profilanswer
 

que c'est comme d'habitude du très bas niveauet que
 

Code :
  1. uni.a = truc;
  2. bidule = uni.b;


 
a un comportement indéfini
 
seul

Code :
  1. uni.a = truc
  2. /* faire des trucs avec uni.a */
  3. uni.b = machin
  4. /* faire des trucs avec uni.b */


est bien défini est sur.
 
on utilise les union, soit pour faire des hacks (j'avais fait une démo à crisbk pour attraper un pointeur de fonction membre en C++), soit pour faire une économie d'espace auquel cas on adjoint une enum qui sert à indiquer le type/le champ à utiliser

n°576591
gilou
Modérateur
Modzilla
Posté le 26-11-2003 à 14:02:11  profilanswer
 

Taz a écrit :

que c'est comme d'habitude du très bas niveauet que
 

Code :
  1. uni.a = truc;
  2. bidule = uni.b;


 
a un comportement indéfini
 
seul

Code :
  1. uni.a = truc
  2. /* faire des trucs avec uni.a */
  3. uni.b = machin
  4. /* faire des trucs avec uni.b */


est bien défini et sur.[:aloy]
 
on utilise les union, soit pour faire des hacks (j'avais fait une démo à crisbk pour attraper un pointeur de fonction membre en C++), soit pour faire une économie d'espace auquel cas on adjoint une enum qui sert à indiquer le type/le champ à utiliser


A+,
PS. Comme j'ai aucune chance de corriger Taz sur le C++, je me rattrape sur l'orthographe [:chacal_one333]


Message édité par gilou le 26-11-2003 à 14:04:00

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°576610
nraynaud
lol
Posté le 26-11-2003 à 14:09:15  profilanswer
 

je me demande si c'est à moi que Taz répondait.


---------------
trainoo.com, c'est fini
n°576639
Taz
bisounours-codeur
Posté le 26-11-2003 à 14:33:43  profilanswer
 

ben demande ce que tu veux j'au pas bien compris ce que tu voulais

n°576649
nraynaud
lol
Posté le 26-11-2003 à 14:36:12  profilanswer
 

Taz a écrit :

ben demande ce que tu veux j'au pas bien compris ce que tu voulais

Moi je sais ce que je veux, mais je réfléchis encore à la réponse ...
en fait j'ai quand même l'impression que struct et union ont _exactement_ le même sens au niveau des types.


---------------
trainoo.com, c'est fini
n°576671
Taz
bisounours-codeur
Posté le 26-11-2003 à 14:44:03  profilanswer
 

oui

n°576685
nraynaud
lol
Posté le 26-11-2003 à 14:55:46  profilanswer
 

c'est pour ça qu'en essayant de mapper les unions sur un type somme ça foirait. Ils sont tous 2 des types produits. Seuls les enums (et les types primitifs, bien sur) sont des types somme.


---------------
trainoo.com, c'est fini
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C C++] différence entre une struc et union

 

Sujets relatifs
MySQL, fait pas la différence entre "e" et "é"Visual C++ difference entre mode debug et exec
Quel est la différence enre hashtable et hashmap ?différence entre postgresql et mysql [résolu merci]
[c] difference object, library, archiveDifférence entre le C et le C++ ??
[uml] difference entre aggregation et association ???[C] Question sur les union et gestion de priorités dans une expression
Différence entre office xp pro et office xp developpeur ?Difference C, C++
Plus de sujets relatifs à : [C C++] différence entre une struc et union


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR