English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutorial di base del linguaggio C

Controllo di flusso del linguaggio C

C语言函数

C语言数组

C语言指针

C语言字符串

Struttura del linguaggio C

File del linguaggio C

C altri

Manuale di riferimento del linguaggio C

C语言共用体(Union)

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.

Come definire l'union?

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.

Creare una variabile union

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.

Accesso ai membri dell'unione

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.

La differenza tra unione e struttura

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.

Esempio: accesso ai membri dell'unione

#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