Introduzione a C Union

Union è un tipo di dati definito dall'utente in c, che consente di archiviare elementi di dati diversi di tipi di dati diversi da archiviare nella stessa posizione di memoria. Fornisce un modo efficiente di utilizzare la memoria, poiché è possibile accedere a un solo membro di un sindacato in un dato momento. La dimensione di un'unione quindi in qualsiasi momento sarebbe uguale alla dimensione del suo elemento più grande. Sebbene l'unione sia come una struttura, la differenza principale è che in una struttura è assegnata una memoria separata per ciascun membro della struttura mentre nell'unione è una memoria condivisa che è equivalente alla dimensione del membro più grande.

Sintassi:

Un'unione può essere definita come di seguito.

union UnionName
(
UMember1;
UMember2;
UMember3;
) UnionReference;

È possibile accedere ai membri dell'Unione C utilizzando il riferimento "UnionReference". unione è una parola chiave.

Esempio di struttura e unione nell'allocazione di memoria:

Dimostriamo la differenza tra struct e union nell'allocazione della memoria.

Codice:

#include
struct samp_structure
(
char name1(30);
int e_id;
float e_slry;
char name2(60);
)s;
union s_union
(
char name1(30);
int e_id;
float saly;
)u;
int main()
(
printf("size of structure :%ld bytes \n", sizeof(s));
printf("size of union : %ld bytes\n", sizeof(u));
return 0;
)

Produzione:

Esempi di Unione C.

Vediamo l'implementazione di C Union con l'aiuto degli esempi menzionati di seguito:

Esempio 1

Questo è l'esempio per definire un'unione C e accedere ai suoi membri.

Codice:

#include
#include
union test (
int tint;
float tf;
char tstr(20);
);
int main( ) (
union test t;
t.tint = 100;
printf( "record.i : %d\n", t.tint);
t.tf= 200.5;
printf( "record.f : %f\n", t.tf);
strcpy( t.tstr, "Test");
printf( "record.str : %s\n", t.tstr);
return 0;
)

Uscita :

Esempio n. 2

Di seguito è riportato lo stesso codice sopra, tranne per il fatto che le istruzioni di stampa sono state riorganizzate.

Codice:

#include
#include
union test (
int tint;
float tf;
char tstr(20);
);
int main( ) (
union test t;
t.tint = 100;
t.tf = 200.5;
strcpy( t.tstr, "Test");
printf( "record.i : %d\n", t.tint);
printf( "record.f : %f\n", t.tf);
printf( "record.str : %s\n", t.tstr);
return 0;
)

Produzione:

Se osservi attentamente l'output, puoi vedere che i valori di immondizia sono stati assegnati per int e float perché alla stringa è stata assegnata la memoria, finalmente, cioè poiché i membri condividono la memoria in un'unione il membro il cui valore è attualmente memorizzato sarà avere accesso alla memoria.

Esempio n. 3

L'unione anonima è un'unione che non ha un nome, quindi può essere utilizzata all'interno di qualsiasi struttura o sindacato nidificato. È possibile accedere direttamente ai membri dell'unione anonima nell'ambito della loro definizione. Allo stesso modo, la struttura anonima può essere utilizzata all'interno di un'unione anonima.

Sintassi dell'unione e della struttura anonime come segue:

// Anonymous union example
union
(
char anoUChar;
int anoUNum;
);
// Anonymous structure example
struct
(
char anoSChar;
int anoSNum;
);

Esempio di unione strutt anonima all'interno di una struttura:

#include
struct testscope
(
// Anonymous union
union
(
char testChar;
int testNum;
int testNum2;
);
);
int main()
(
struct testscope ts;
ts.testNum = 65;
// Note that members of union are accessed directly
printf("testchar = %c, testnum = %d, testnum2 = %d", ts.testChar, ts.testNum, ts.testNum2);
return 0;
)

Produzione:

A testchar è stato assegnato il valore 'A' perché il valore recente nella memoria unione è 65 assegnato a testNum, quindi viene stampato il corrispondente carattere ASCII.

Nota: è possibile accedere direttamente ai membri del sindacato.

Esempio di struttura anonima all'interno di un'unione:

#include
union testscope
(
// Anonymous union
struct
(
char testChar;
int testNum;
int testNum2;
);
);
int main()
(
union testscope ts;
ts.testNum = 65;
ts.testChar='V';
//Note: The members of struct are accessed directly
printf("testchar = %c, testnum = %d, testnum2 = %d", ts.testChar, ts.testNum, ts.testNum2);
return 0;
)

Produzione:

Conclusione

Pertanto, l'unione aiuta a gestire la memoria in modo efficiente. Lo svantaggio dell'unione è che solo l'ultimo valore inserito nell'unione sarà disponibile solo. Dovrebbe essere usato quando i membri del sindacato non devono essere disponibili per accedere contemporaneamente.

Articoli consigliati

Questa è una guida a C Union. Qui discutiamo l'introduzione, la sintassi e diversi esempi di unione con l'implementazione del codice. Puoi anche consultare i seguenti articoli per saperne di più-

  1. Parole chiave
  2. Matrici in programmazione C.
  3. Programma Palindrome in C ++
  4. C Classi di archiviazione

Categoria: