In questo tutorial imparerai a conoscere i sindacati nella programmazione C. Più specificamente, come creare sindacati, accedere ai suoi membri e apprendere le differenze tra sindacati e strutture.
Un'unione è un tipo definito dall'utente simile alle strutture in C ad eccezione di una differenza chiave. Le strutture assegnano spazio sufficiente per memorizzare tutti i suoi membri mentre i sindacati allocano lo spazio per memorizzare solo il membro più grande.
Come definire un'unione?
Usiamo la union
parola chiave per definire i sindacati. Ecco un esempio:
union car ( char name(50); int price; );
Il codice precedente definisce un tipo derivato union car
.
Crea variabili di unione
Quando viene definita un'unione, crea un tipo definito dall'utente. Tuttavia, non viene allocata alcuna memoria. Per allocare memoria per un dato tipo di unione e lavorarci sopra, dobbiamo creare variabili.
Ecco come creiamo le variabili di unione.
union car ( char name(50); int price; ); int main() ( union car car1, car2, *car3; return 0; )
Un altro modo per creare variabili di unione è:
union car ( char name(50); int price; ) car1, car2, *car3;
In entrambi i casi, vengono create le variabili di unione car1, car2 e un puntatore di unione car3 di union car
tipo.
Accedi ai membri di un sindacato
Usiamo l' .
operatore per accedere ai membri di un sindacato. Per accedere alle variabili del puntatore, utilizziamo anche l' ->
operatore.
Nell'esempio sopra,
- Per accedere al prezzo
car1
,car1.price
viene utilizzato. - Per prezzo di accesso utilizzando
car3
, sia(*car3).price
ocar3->price
può essere utilizzato.
Differenza tra sindacati e strutture
Facciamo un esempio per dimostrare la differenza tra unioni e strutture:
#include union unionJob ( //defining a union char name(32); float salary; int workerNo; ) uJob; struct structJob ( char name(32); float salary; int workerNo; ) sJob; int main() ( printf("size of union = %d bytes", sizeof(uJob)); printf("size of structure = %d bytes", sizeof(sJob)); return 0; )
Produzione
dimensione dell'unione = 32 dimensione della struttura = 40
Perché questa differenza nella dimensione delle variabili di unione e di struttura?
Qui, la dimensione di sJob è di 40 byte perché
- la dimensione di
name(32)
è di 32 byte - la dimensione di
salary
è di 4 byte - la dimensione di
workerNo
è di 4 byte
Tuttavia, la dimensione di uJob è di 32 byte. È perché la dimensione di una variabile di unione sarà sempre la dimensione del suo elemento più grande. Nell'esempio precedente, la dimensione del suo elemento più grande, ( name(32)
), è di 32 byte.
Con un'unione, tutti i membri condividono la stessa memoria .
Esempio: accesso ai membri dell'Unione
#include union Job ( float salary; int workerNo; ) j; int main() ( j.salary = 12.3; // when j.workerNo is assigned a value, // j.salary will no longer hold 12.3 j.workerNo = 100; printf("Salary = %.1f", j.salary); printf("Number of workers = %d", j.workerNo); return 0; )
Produzione
Salario = 0,0 Numero di lavoratori = 100
Per sapere dove vengono utilizzati i sindacati, visitare Perché abbiamo bisogno dei sindacati C?