single
Unioni
Scorri per mostrare il menu
Una union è un tipo di dato definito dall'utente in C, simile a una struttura. La principale differenza è che tutti i suoi membri condividono la stessa posizione di memoria. In qualsiasi momento, solo un membro può contenere un valore.
Le union sono usate raramente, ma sono utili quando si desidera una variabile che possa contenere tipi di dati diversi in momenti diversi risparmiando memoria.
I dati si trovano nella stessa area di memoria per tutti i membri dell'unione. Questo significa che tutti i membri dell'unione condividono lo stesso indirizzo di memoria e la dimensione dell'unione è pari a quella del suo membro più grande.
L'uso principale di una union è la sovrapposizione di diversi tipi di dati su una stessa area di memoria, ovvero la rappresentazione di una singola area di memoria come tipi di dati differenti.
Poiché in una union i campi occupano la stessa cella di memoria, è possibile elaborare gli stessi dati in modi diversi:
main.c
12345678910111213141516#include <stdio.h> // declaring a union union Data { int a; char b; } data; int main() { data.a = 77; // assigning a value to variable a printf("Value of data.a: %d\n", data.a); printf("Value of data.b: %c\n", data.b); return 0; }
Nell'esempio, le variabili data.a e data.b condividono la stessa memoria. Abbiamo assegnato il valore 77 a a, ma possiamo interpretare gli stessi byte come un carattere in b.
Allineamento nelle union
Come le struct, anche le union utilizzano allineamento e padding. Il compilatore può aggiungere byte extra affinché ogni membro inizi al corretto confine di memoria.
main.c
12345678910111213#include <stdio.h> union Data { int a; // 4 bytes double b; // 8 bytes char c[20]; // 20 bytes }; int main() { printf("Size of union Data: %zu bytes\n", sizeof(union Data)); return 0; }
Una union può memorizzare solo un valore alla volta e la sua dimensione è pari a quella del suo membro più grande. Nell'esempio con int a (4 byte), double b (8 byte) e char c[20], la dimensione minima della union è 20 byte. Tuttavia, il compilatore può aggiungere byte extra per l'allineamento, affinché double o int inizino al corretto confine di memoria. Di conseguenza, sizeof(union Data) può essere maggiore di 20, ad esempio 24 byte.
Scorri per iniziare a programmare
L'unione Data memorizza ciascun valore come int e consente l'accesso allo stesso valore come char. La funzione deve iterare sull'array e stampare ogni valore sia come intero sia come carattere ASCII corrispondente.
La funzione accetta due parametri: un array di interi (values) e la sua lunghezza (n).
- Utilizzare una
union Datacon due membri:int aechar b. - In un ciclo
for, iterare sugli elementi dell'array da0an. - Assegnare l'elemento corrente dell'array al membro
intdell'unione (data.a). - Stampare il valore intero
data.ae la rappresentazione come caratteredata.b.
Example
{65, 66, 67, 68, 69} =>
Value as int: 65, Value as char: A
Value as int: 66, Value as char: B
Value as int: 67, Value as char: C
Value as int: 68, Value as char: D
Value as int: 69, Value as char: E
Soluzione
Grazie per i tuoi commenti!
single
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione