Differenza tra struttura e unione in C

Che cos'è la struttura?

La struttura è un tipo di dati definito dall'utente nel linguaggio di programmazione C che combina insieme elementi di dati logicamente correlati di diversi tipi di dati.

Tutti gli elementi della struttura vengono memorizzati in locazioni di memoria contigue. La variabile del tipo di struttura può memorizzare più di un elemento di dati di diversi tipi di dati sotto un unico nome.

Cos'è l'Unione

L'unione è un tipo di dati definito dall'utente, proprio come una struttura. Union unisce insieme oggetti di diversa tipologia e dimensione. La variabile union alloca lo spazio di memoria pari allo spazio per contenere la variabile union più grande. Consente a diversi tipi di oggetti di condividere la stessa posizione.

Sintassi della struttura dichiarante

struct [name of the structure]
   {
       type member1;
       type member2;
       type member3;
   };

La struttura viene dichiarata utilizzando la parola chiave "struct" e il nome della struttura. Il numero 1, il numero 2, il numero 3 sono membri individuali della struttura. La parte del corpo termina con un punto e virgola (;).

Esempio di struttura nella programmazione in C

#include <stdio.h>
struct student {
    char name[60];
    int roll_no;
    float marks;
} sdt;
int main() {
    printf("Enter the following information:\n");
    printf("Enter student name: ");
    fgets(sdt.name, sizeof(sdt.name), stdin);
    printf("Enter student roll number: ");
    scanf("%d", & sdt. roll_no);
    printf("Enter students marks: ");
    scanf("%f", & sdt.marks);
    printf("The information you have entered is: \n");
    printf("Student name: ");
    printf("%s", sdt.name);
    printf("Student roll number: %d\n", sdt. roll_no);
    printf("Student marks: %.1f\n", sdt.marks);
    return 0;
}

Nel programma sopra viene creata una struttura chiamata student. Questa struttura ha tre membri dati: 1) nome (stringa), 2) roll_no (intero) e 3) contrassegni (float).

Successivamente, viene creata una variabile di struttura sdt per memorizzare le informazioni sugli studenti e visualizzarle sullo schermo del computer.

Produzione:

Inserisci le seguenti informazioni:

Inserisci il nome dello studente: James

Inserisci il numero di matricola degli studenti: 21

Inserisci i voti degli studenti: 67

Le informazioni che hai inserito sono:

Nome dello studente: Giovanni

Numero di matricola degli studenti: 21

Voto degli studenti: 67.0

Sintassi della dichiarazione dell'unione

union [name of union]
    {
       type member1;
       type member2;
       type member3;
    };

L'unione viene dichiarata utilizzando la parola chiave "union" e il nome dell'unione. Il numero 1, il numero 2, il numero 3 sono membri individuali del sindacato. La parte del corpo termina con un punto e virgola (;).

Esempio di unione nella programmazione C

#include <stdio.h>

union item
{
    int x;
    float y;
    char ch;
};

int main( )
{
    union item it;
    it.x = 12;
    it.y = 20.2;
    it.ch = 'a';
    
    printf("%d\n", it.x);
    printf("%f\n", it.y);
    printf("%c\n", it.ch);
    
    return 0;
}

Produzione:

1101109601

20.199892

a

Nel programma sopra, puoi vedere che i valori di xey vengono danneggiati. Solo la variabile ch stampa il risultato atteso. È perché, nell'unione, la posizione di memoria è condivisa tra tutti i tipi di dati membri.

Pertanto, l'unico membro dati il ​​cui valore è attualmente archiviato occuperà lo spazio di memoria. Il valore della variabile ch è stato infine memorizzato, quindi il valore del resto del file variabili è perduto.

Struttura vs. Unione

Struttura vs. Unione
Struttura vs. Unione

Ecco la differenza importante tra struttura e unione:

Structure Unione
È possibile utilizzare una parola chiave struct per definire una struttura. È possibile utilizzare una parola chiave union per definire un'unione.
Ad ogni membro all'interno della struttura viene assegnata una posizione di memoria univoca. Nell'unione, una posizione di memoria è condivisa da tutti i membri dei dati.
La modifica del valore di un membro dati non influirà sugli altri membri dati nella struttura. La modifica del valore di un membro dati modificherà il valore degli altri membri dati nell'unione.
Ti consente di inizializzare più membri contemporaneamente. Ti consente di inizializzare solo il primo membro dell'unione.
La dimensione totale della struttura è la somma delle dimensioni di ogni membro dati. La dimensione totale dell'unione corrisponde alla dimensione del membro dati più grande.
Viene utilizzato principalmente per memorizzare vari tipi di dati. Viene utilizzato principalmente per memorizzare uno dei tanti tipi di dati disponibili.
Occupa spazio per ogni singolo membro scritto nei parametri interni. Occupa spazio per un membro con la dimensione più alta scritta nei parametri interni.
Puoi recuperare qualsiasi membro alla volta. Puoi accedere all'unione un membro alla volta.
Supporta array flessibili. Non supporta un array flessibile.

Vantaggi della struttura

Ecco i vantaggi/vantaggi derivanti dall'utilizzo della struttura:

  • Le strutture raccolgono più dati sullo stesso argomento nello stesso posto.
  • È utile quando si desidera raccogliere dati di tipi di dati e parametri simili come nome, cognome, ecc.
  • È molto semplice da mantenere poiché possiamo rappresentare l'intero record utilizzando un singolo nome.
  • Nella struttura, possiamo passare un set completo di record a qualsiasi funzione utilizzando un singolo parametro.
  • È possibile utilizzare una matrice di struttura per archiviare più record con tipi simili.

Vantaggi dell'unione

Ecco i vantaggi/vantaggi derivanti dall'utilizzo di Union:

  • Occupa meno memoria rispetto alla struttura.
  • Quando usi l'unione, è possibile accedere direttamente solo all'ultima variabile.
  • L'unione viene utilizzata quando è necessario utilizzare la stessa posizione di memoria per due o più membri dati.
  • Ti consente di conservare i dati di un solo membro dati.
  • Lo spazio allocato è uguale alla dimensione massima del membro dati.

Svantaggi della struttura

Ecco i contro/svantaggi relativi all'utilizzo della struttura:

  • Se la complessità di un progetto IT supera il limite, diventa difficile gestirlo.
  • La modifica di una struttura dati in un codice richiede modifiche in molti altri punti. Pertanto, i cambiamenti diventano difficili da monitorare.
  • La struttura è più lenta perché richiede spazio di archiviazione per tutti i dati.
  • Puoi recuperare qualsiasi membro alla volta nella struttura mentre puoi accedere a un membro alla volta nell'unione.
  • La struttura occupa spazio per ogni membro scritto nei parametri interni mentre l'unione occupa spazio per un membro avente la dimensione più alta scritta nei parametri interni.
  • La struttura supporta un array flessibile. Union non supporta un array flessibile.

Svantaggi dell'unione

Ecco i contro/svantaggi dell'utilizzo di union:

  • Puoi utilizzare un solo membro del sindacato alla volta.
  • Tutte le variabili dell'unione non possono essere inizializzate o utilizzate con valori variabili alla volta.
  • L'Unione assegna uno spazio di archiviazione comune a tutti i suoi membri.

DIFFERENZE CHIAVE:

  • Ad ogni membro all'interno della struttura viene assegnata una posizione di memoria univoca mentre nell'unione una posizione di memoria è condivisa da tutti i membri dati.
  • La modifica del valore di un membro dati non influirà sugli altri membri dati nella struttura, mentre la modifica del valore di un membro dati modificherà il valore degli altri membri dati nell'unione.
  • La struttura viene utilizzata principalmente per memorizzare vari tipi di dati mentre l'unione viene utilizzata principalmente per memorizzare uno dei tanti tipi di dati.
  • Nella struttura, puoi recuperare qualsiasi membro alla volta, mentre in unione puoi accedere a un membro alla volta.
  • La struttura supporta l'array flessibile mentre l'unione non supporta un array flessibile.

Controlla anche il nostro tutorial C per principianti: - Clicca qui