467 Stimmen

Unterschied zwischen einer Struktur und einem Verband

Gibt es ein gutes Beispiel, das den Unterschied zwischen einer struct und eine union ? Im Grunde weiß ich, dass struct verwendet den gesamten Speicher seines Mitglieds und union verwendet den größten Speicherplatz der Mitglieder. Gibt es weitere Unterschiede auf Betriebssystemebene?

4voto

Was ist der Unterschied zwischen Struktur und Gewerkschaft?

Die kurze Antwort lautet: Die Abweichung liegt in der Speicherzuweisung. Erläuterung: In einer Struktur wird Speicherplatz für alle Mitglieder innerhalb der Struktur geschaffen. In einer Union wird nur für das Mitglied, das den größten Speicherplatz benötigt, Speicherplatz angelegt. Betrachten Sie den folgenden Code:

struct s_tag
{
   int a; 
   long int b;
} x;

union u_tag
{
   int a; 
   long int b;
} y;

Hier gibt es zwei Mitglieder innerhalb von struct und union: int und long int. Der Speicherplatz für int ist: 4 Byte und Speicherplatz für long int ist: 8 in 32-Bit-Betriebssystemen.

Für struct werden also 4+8=12 Bytes erstellt, während für union 8 Bytes erstellt werden

Code-Beispiel:

#include<stdio.h>
struct s_tag
{
  int a;
  long int b;
} x;
union u_tag
{
     int a;
     long int b;
} y;
int main()
{
    printf("Memory allocation for structure = %d", sizeof(x));
    printf("\nMemory allocation for union = %d", sizeof(y));
    return 0;
}

Ref: http://www.codingpractise.com/home/c-programming/structure-and-union/

3voto

Anurag Bhakuni Punkte 2281

Eine Struktur ist eine Sammlung von verschiedenen Datentypen, in der verschiedene Datentypen enthalten sein können und jeder seinen eigenen Speicherblock erhält.

Normalerweise verwenden wir eine Union, wenn wir sicher sind, dass nur eine der Variablen auf einmal verwendet wird und Sie die volle Ausnutzung des vorhandenen Speichers wünschen, da sie nur einen Speicherblock erhält, der dem größten Typ entspricht.

struct emp
{
    char x; //1 byte
    float y; //4 byte
} e;

Gesamtspeicherbedarf: =>5 Bytes.

union emp
{
    char x; //1 byte
    float y; //4 byte
} e;

Gesamter Speicherplatz: 4 Bytes.

3voto

Ahmed Punkte 31

Die Verwendung von Gewerkschaften Unions werden häufig verwendet, wenn spezialisierte Typkonversationen erforderlich sind. Um eine Vorstellung von der Nützlichkeit von union zu bekommen. Die c/c-Standardbibliothek definiert keine Funktion, die speziell dafür ausgelegt ist, kurze Ganzzahlen in eine Datei zu schreiben. Die Verwendung von fwrite() verursacht einen übermäßigen Overhead für eine einfache Operation. Mit einer Union kann man jedoch leicht eine Funktion erstellen, die eine kurze ganze Zahl byteweise in eine Datei schreibt. Ich nehme an, dass kurze Ganzzahlen 2 Byte lang sind.

DAS BEISPIEL:

#include<stdio.h>
union pw {
short int i;
char ch[2];
};
int putw(short int num, FILE *fp);
int main (void)
{
FILE *fp;
fp fopen("test.tmp", "wb ");
putw(1000, fp); /* write the value 1000 as an integer*/
fclose(fp);
return 0;
}
int putw(short int num, FILE *fp)
{
pw word;
word.i = num;
putc(word.c[0] , fp);
return putc(word.c[1] , fp);
}    

obwohl putw() mit einer kurzen Ganzzahl aufgerufen wurde, war es möglich, putc() und fwrite() zu verwenden. Aber ich wollte ein Beispiel zeigen, um zu verdeutlichen, wie eine Union verwendet werden kann

2voto

Aniket Suryavanshi Punkte 1374

Unions sind beim Schreiben einer Byte-Ordering-Funktion, die unten angegeben ist, sehr nützlich. Mit structs ist das nicht möglich.

int main(int argc, char **argv) {
    union {
        short   s;
        char    c[sizeof(short)];
    } un;

    un.s = 0x0102;

    if (sizeof(short) == 2) {
        if (un.c[0] == 1 && un.c[1] == 2)
            printf("big-endian\n");
        else if (un.c[0] == 2 && un.c[1] == 1)
            printf("little-endian\n");
        else
            printf("unknown\n");
    } else
        printf("sizeof(short) = %d\n", sizeof(short));

    exit(0);
}
// Program from Unix Network Programming Vol. 1 by Stevens.

1voto

Dennis Ng Punkte 351

Eine Union unterscheidet sich von einer struct, da eine Union die anderen wiederholt: Sie definiert denselben Speicher neu, während die struct einen nach dem anderen definiert, ohne Überschneidungen oder Neudefinitionen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X