2016-10-13 5 views
-9

Betrachten Sie den folgenden Code ein:Speicherung von Strukturelementen in C

struct employee 
{ 
    int id; 
    char name[30]; 
}; 

main() 
{ 
    struct employee e1;  
    printf("%d %d %d", sizeof(e1.id), sizeof(e1.name), sizeof(e1)); 
} 

, wo die Strukturelemente im Speicher gespeichert werden und wie? Und was ist die Größe der Struktur?

+0

Structs werden nach denselben Regeln wie normale Variablen gespeichert. Der einzige Unterschied besteht darin, dass die Strukturelemente zusammen gespeichert werden. Die Größe ist implementierungsabhängig, da für die Ausrichtung ein Padding vorhanden sein kann. (Entschuldigung für die Technik.) –

+0

"Bitte erläutern Sie jede Zeile"? SO ist nicht die Art von Website, wo Sie zu "erklären Sie jede Zeile" Anfragen bekommen. Sie müssen jede Zeile selbst erklären. Und wenn Sie irgendwelche * spezifischen * Fragen dabei haben - zögern Sie nicht zu fragen. – AnT

+1

Ich kann erklären, dass Sie '#include ' verpasst haben und dass '% d' der falsche Formatbezeichner ist, um einen 'sizeof'-Wert zu drucken, sollte es'% zu' sein, und das 'return' ist keine Funktion . –

Antwort

1

In diesem Fall wird der Speicher im Programmstapel gespeichert. Das bedeutet natürlich, dass Sie keine Strukturen speichern möchten, die auf diese Weise zu groß sind.

Die Größe des Arbeitsspeichers ist die Gesamtzahl der Bytes, die von der Struktur verwendet werden. Angenommen, Ihre Plattform verwendet 1 Byte pro char, das wären 30 Byte plus die Größe eines int (was auch immer) es auf Ihrer Plattform ist.

Beachten Sie auch, dass Compiler in einigen Fällen einige Füllbytes zwischen den Elementen einfügen können. Verwenden Sie sizeof(e1), um die wahre Größe zu erhalten. Es sieht so aus, als hättest du das getan. Warum fragst du uns nach der Größe?

+0

Alle Plattformen verwenden 1 Byte pro Zeichen. 'sizeof (char)' ist per definitionem 1. –

Verwandte Themen