Raccordi C (con esempi)

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 unionparola 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 cartipo.

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.priceviene utilizzato.
  • Per prezzo di accesso utilizzando car3, sia (*car3).priceo car3->pricepuò 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?

Articoli interessanti...