Programmazione · 5 min read · Oct 10, 2025

Apprendimento C/C++ Passo dopo Passo - Pagina 11

11. Passo dopo Passo C/C++ — Programmazione C - Unioni

Unioni

| | 1. Introduzione

  1. Informazioni sulle Unioni
  2. Dichiarazione di una Unione
  3. Definizione di una Variabile Unione
  4. Differenza tra Struttura e Unione
  5. Operazioni sulle Unioni
  6. Ambito di una Unione |

1. Introduzione

| | / 81_union.c /
#include
struct s_emp
{
int eno;
char name[20];
float sal;
};
union u_emp
{
int eno;
char name[20];
float sal;
};
int main()
{
struct s_emp se;
union u_emp ue;
printf(“\nDimensione della struttura Employee    :  %d”, sizeof(se));
printf(“\nDimensione dell’Unione Employee      :  %d”, sizeof(ue));
return 0;
} | | | Output: Dimensione della Struttura Employee : 26
Dimensione dell’Unione Employee : 20 |

2. Informazioni sulle Unioni

Quando viene richiesto di utilizzare un gran numero di variabili in un programma, esse occupano una grande quantità di memoria. Le unioni forniscono un modo più semplice per risparmiare memoria utilizzando una tecnica di sostituzione. Utilizzano la stessa posizione di memoria per tutti i tipi di variabili.

Un’unione è un tipo di dato in C, che consente di sovrapporre più di una variabile nella stessa area di memoria.

Caratteristiche delle Unioni:

| | 1. L’unione memorizza valori di diversi tipi in una singola posizione in memoria.

  1. Un’unione può contenere uno di molti tipi diversi di valori, ma solo uno è memorizzato alla volta.
  2. L’unione tiene solo un valore per un tipo di dato. Se viene effettuata una nuova assegnazione, il valore precedente non ha validità.
  3. Qualsiasi numero di membri dell’unione può essere presente. Ma la variabile di tipo unione occupa la memoria più grande occupata dai suoi membri. |

3. Dichiarazione di una Unione

L’unione è un tipo di dato attraverso il quale oggetti di diversi tipi e dimensioni possono essere memorizzati in momenti diversi. La definizione di un’unione è la stessa di una Struttura. L’unico cambiamento nella dichiarazione è la sostituzione della parola chiave union con la parola chiave struct.

| | |

Es:

| | union ddate
{
int day;
int month;
int year;
}; | union student
{
int sno;
char name[20];
int marks;
float avg;
}; |

4. Definizione di una Variabile Unione

Definire una variabile unione è lo stesso che per una struttura e per definire un tipo di dato incorporato come int.

| | int a; / Valido /
union date d; / Valido in C e C++ / |

Calcolo della dimensione dell’Unione

Ogni tipo di dato in C/C++ ha una dimensione specificata, cioè int ha 2 byte di dimensione, float ha 4 byte di dimensione e così via. Ecco il modo per trovare la dimensione di una variabile unione.
sizeof:- Questa funzione viene utilizzata per trovare la dimensione di una variabile data.

| | printf(“%d”, sizeof(int)); / 2 /
printf(“%d”, sizeof(float)); / 4 /
printf(“%d”, sizeof(union emp)); / Visualizza la dimensione dell’unione emp / |

5. Differenza tra Strutture e Unioni

Ecco la differenza tra Strutture e Unioni

StrutturaUnione **
1. Può contenere diversi tipi (variabili) in una singola posizione.1. Può contenere diversi tipi (variabili) in posizioni diverse.
2. Può contenere più di un tipo (variabile) ma solo uno è memorizzato alla volta.2. Può contenere più di un tipo (variabile) tutti memorizzati in memoria contemporaneamente.
3. Qualsiasi numero di membri dell’unione può essere presente. Ma la variabile di tipo unione occupa la memoria più grande occupata dal suo membro.3. Richiede memoria della dimensione di tutti i suoi membri.
4. Nel suo processo solo un membro può essere accesso in un dato momento.4. Nel suo processo tutti i membri possono essere accessibili in qualsiasi momento.
5. L’ambito dell’unione è la funzione e l’ambito dei suoi membri è lo stesso dell’unione stessa. (Possono essere accessibili direttamente nel programma).5. L’ambito della Struttura è solo la funzione. I membri della Struttura non possono essere accessibili direttamente nel programma.

6. Operazioni sulle Unioni

Un’unione è anche simile a una struttura e può eseguire tutte le operazioni come le strutture. Le operazioni sulle Unioni sono elencate di seguito.

| | • Una variabile unione può essere assegnata a un’altra variabile unione.
• Una variabile unione può essere passata a una funzione come parametro
• L’indirizzo della variabile unione può essere estratto utilizzando l’operatore di indirizzo (&).
• Una funzione può accettare e restituire un’unione o un puntatore a un’unione. |

| | / 82_union.c /
#include
union u_emp
{
int eno;
char name[20];
float sal;
};
int main()
{
union u_emp ue;
printf(“Inserisci il Numero dell’Impiegato  : “); scanf(“%d”, &ue.eno);
printf(“Inserisci il Nome dell’Impiegato   : “); scanf(“%s”, ue.name);
printf(“Inserisci il Salario dell’Impiegato  : “); scanf(“%f”, &ue.sal);
printf(“\n\nI dettagli dell’Impiegato sono i seguenti…\n”);
printf(“%d %s %f “, ue.eno, ue.name, ue.sal);
return 0;
} |

| | Qual è l’output?
Solo ue.sal è corretto. E gli altri variabili? |

In qualsiasi istante solo una delle variabili dell’unione avrà un valore significativo. Solo quel membro, che è stato scritto per ultimo, può essere letto. A questo punto, le altre variabili conterranno valori spazzatura. È responsabilità del programmatore tenere traccia della variabile attiva (cioè la variabile che è stata accessibile per ultima).

Ecco il modo migliore per accettare e visualizzare i record di un impiegato.

| | / 83_emp.c /
#include
union u_emp
{
int eno;
char name[20];
float sal;
};
int main()
{
union u_emp ue;
printf(“\nInserisci il Numero dell’Impiegato  : “); scanf(“%d”, &ue.eno);
printf(“\n%d”, ue.eno);
printf(“\nInserisci il Nome dell’Impiegato : “); scanf(“%s”, ue.name);
printf(“\n%s”, ue.name);
printf(“\nInserisci il Salario dell’Impiegato  : “); scanf(“%f”, &ue.sal);
printf(“\n%f”,ue.sal);
return 0;
} |

7. Ambito di una Unione

L’ambito dell’unione è diverso da quello della struttura. Una variabile di struttura può essere accessibile solo dalle sue funzioni. Mentre un’unione e i suoi membri possono essere accessibili dalla sua funzione.

| | / 84_scope.c /
#include
int main()
{
unione
{
int i;
char c;
float f;
};
i = 10; c = ‘a’; f = 4.5; / Membri dell’Unione /
printf(“Il valore di c è : %c”, c);
return 0;
} |

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.