English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In questo tutorial, imparerai l'union in programmazione C. In particolare, come creare un'union (union), accedere ai suoi membri e comprendere la differenza tra union e struttura. L'union è anche chiamata union, e appartiene allo stesso tipo di struttura dei tipi di dati C.
L'union è un tipo di dati speciale che ti permette di memorizzare diversi tipi di dati nello stesso indirizzo di memoria. Puoi definire un'union con più membri, ma in qualsiasi momento può avere solo un membro con valore. L'union offre un modo efficace per utilizzare lo stesso spazio di memoria.
L'union è anche un tipo definito dall'utente, simile a Cstructcon la differenza di una parola chiave. La struttura assegna abbastanza spazio per memorizzare tutti i membri, mentre l'union assegna spazio solo per il membro più grande.
Usiamo la parola chiave union per definire l'union. Ecco un esempio:
union car { char name[50]; int price; };
Il codice sopra definisce il tipo deriva union car.
Dopo la definizione dell'union, verrà creato un tipo utente definito. Tuttavia, non viene assegnata memoria. Per assegnare memoria a un tipo di unione dati specifico e utilizzarlo, dobbiamo creare una variabile.
Questo è il metodo con cui creiamo le variabili union.
union car { char name[50]; int price; }; int main() { union car car1, car2, *car3; return 0; }
Un altro metodo per creare una variabile union è:
union car { char name[50]; int price; } car1, car2, *car3;
In entrambi i casi, verranno creati i variabili union di tipo union car car1, car2 e il puntatore car3.
Usiamo l'operatore . per accedere ai membri dell'unione. Per accedere alle variabili puntatore, usiamo anche l'operatore ->.
Nell'esempio sopra,
Per accedere al prezzo di car1 (price), utilizzare car1.price.
Per accedere al prezzo di car3 (price), è possibile utilizzare (*car3).price o car3->price.
Facciamo un esempio per illustrare la differenza tra unione e struttura:
#include <stdio.h> union unionJob { // Definizione union char name[32]; float salary; int workerNo; } uJob; struct structJob { char name[32]; float salary; int workerNo; } sJob; int main() { printf("La dimensione dell'unione = %d byte", sizeof(uJob)); printf("\nLa dimensione della struttura = %d byte", sizeof(sJob)); return 0; }
输出结果
La dimensione dell'unione è 32 byte La dimensione della struttura è 40 byte
Perché la dimensione delle variabili union e delle variabili struttura esiste questa differenza?
In questo caso, 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
Ma la dimensione di uJob è di 32 byte. Questo perché la dimensione delle variabili union sarà sempre la dimensione del loro elemento più grande. Nell'esempio sopra, la dimensione del suo elemento più grande (name[32]) è di 32 byte.
Utilizzando l'unione, tutti i membri condividonoStessa memoria.
#include <stdio.h> union Job { float salary; int workerNo; } j; int main() { j.salary = 12.3; // Quando j.workerNo viene assegnato // j.salary non verrà più conservato 12.3 j.workerNo = 100; printf("薪水 = %.1f\n", j.salary); printf("工人人数 = %d", j.workerNo); return 0; }
输出结果
薪水 = 0.0 工人人数 = 100