Ich möchte nach einer Strukturdeklaration in C fragen. Zum Beispiel:
struct Person
{
char name[50];
int citNo;
float salary;
} prsn[20];
Was macht [20]
das Was bedeutet das? Beschränkt es den Namen auf 20 (von 50) oder den prsn
von prsn[1]
auf prsn[20]
?
Und wenn ich den Code so schreibe:
struct Person
{
char name[50];
int citNo;
float salary;
};
struct Person prsn[20];
Tut es das Gleiche?
20
Elementen vom Typstruct Person
int prsn[20];
Ausnahme von struct Person anstelle von intAntworten:
Die folgenden Kommentare zeigen die allgemeine Nomenklatur für die Teile Ihrer Struktur :
Das
[20]
zeigt an, dass diese Instanzstruct Person
ein Array von 20 separaten Sammlungen der 3 Mitglieder ist. Auf jedes Element des Arrays kann mit der Array-Notation zugegriffen werden. Zum Beispiel in einer Schleife:Das Mitglied
name[50]
definiert ein Array mit 50 Zeichen. Seine Größe wird in keiner Weise durch den[20]
Index beeinflusst, der zur Größe des Arrays von struct verwendet wird. dh , wie Sie es definiert haben, gibt es 20 Fälle vonprsn
, jede Instanz , die 3 Mitglieder:char [50]
,int
undfloat
. Und Ihrer Definition nach ermöglichen die 20 von der erstellten Instanzen den[20]
Zugriff auf das Array mit Indexwerten von0
bis19
. (Siehe Schleifenabbildung oben.)BEARBEITEN , um die OP-Frage in den Kommentaren zu beantworten:
Wenn Sie die leeren Array-Klammern verwenden möchten, (
[]
) muss die Definition eine Strukturinitialisierungsliste enthalten . Zum Beispiel:Wenn die Größe des Strukturarrays zur Kompilierungszeit nicht bekannt ist und gemäß den nur zur Laufzeit verfügbaren Informationen dimensioniert werden muss, kann entweder eine dynamische Speicherzuweisung oder eine VLA verwendet werden. Erstellen Sie für den dynamischen Speicher zunächst eine Zeigerinstanz, anstatt sie mit der Array-Notation zu definieren:
Verwenden Sie dann in einer Funktion
calloc
odermalloc
, um Speicher für beispielsweise 1000 Instanzen zu erstellen:Für VLA müssen die erstellten Instanzen einen lokalen Bereich haben. Führen Sie also innerhalb einer Funktion irgendwo Folgendes aus:
Beachten Sie, dass für diese Methode kein Speicher freigegeben werden muss
newPerson
quelle
Die beiden obigen Codeteile sind äquivalent.
Im ersten definieren
struct Person
und definieren Sieprsn
als Array von 20 Elementen dieser Struktur gleichzeitig. Im zweiten Fall definieren Sie zuerst die Struktur und dann das Array separat.In C beginnen Array-Indizes bei 0, sodass das
prsn
Array in beiden Fällen Elemente enthält, die von 0 bis 19 indiziert sind. Dies hat keinen Einfluss auf die Größe desname
Elements, bei dem es sich um ein Array mit 50 Elementen handelt. Sie haben eine Reihe von 20struct Person
, von denen jede enthält eine 50 - Element - Array vonchar
genanntname
.Um die Arraygröße unbegrenzt zu machen, muss ein Array eine Größe haben, die entweder explizit zwischen
[
und]
oder implizit über eine Initialisierungsliste angegeben wird. Die Größe kann eine Variable sein, ein solches Array kann jedoch nicht im Dateibereich definiert werden, und der Größenvariablen muss zuvor ein Wert zugewiesen worden sein.quelle
[
und]
implizit über eine Initialisierungsliste angegeben wird. Die Größe kann eine Variable sein, ein solches Array kann jedoch nicht im Dateibereich definiert werden, und der Größenvariablen muss zuvor ein Wert zugewiesen worden sein.Sie deklarieren ein Array mit 20 Strukturen dieses Typs
quelle