Freigeben über


Eindimensionale Arrays

Ein Postfixausdruck, der von einem Ausdruck in eckigen Klammern ([]), gefolgt wird, ist eine indizierte Darstellung eines Elements eines Arrayobjekts.Ein Indexausdruck stellt den Wert an der Adresse dar, die Ausdrücke Positionen zu Postfixausdruck befindet, wenn er wie ausgedrückte

postfix-expression [ expression ]

Normalerweise ist der Wert, der von Postfixausdruck dargestellte ein Zeigerwert, wie ein Matrixname und Ausdruck ist ein ganzzahliger Wert.Allerdings ist, der alle syntaktisch erforderlich ist, um diese Ausdrücke ist vom Zeigertyp und der andere Ausdruck ist vom ganzzahligen Typ.Daher kann der ganzzahlige Wert in der Postfixausdrucks Zeilenposition sein, und der Zeigerwert konnte in eckige Klammern im Ausdruck„oder“ Position im Index sein.Beispielsweise ist der Code gültig:

// one_dimensional_arrays.c
int sum, *ptr, a[10];
int main() {
   ptr = a;
   sum = 4[ptr];
}

Indexausdrücke werden im Allgemeinen verwendet, um Arrayelemente zugreifen, aber Sie können einen Feldindex für jeden Zeiger angewendet werden.Wie auch immer die Reihenfolge von Werten, Ausdruck in eckigen Klammern ([]) eingeschlossen werden muss.

Der Indexausdruck wird ausgewertet, indem der Zeigerwert in den ganzzahligen Wert hinzugefügt wird, den*****(Dereferenzierungsoperator) wendet das Ergebnis.(Siehe Dereferenzierung und ADDRESS-Von Operators zur Erläuterung der Dereferenzierungsoperator). Tatsächlich für ein eindimensionales Array, sind die folgenden vier Ausdrücke entspricht, und davon ausgehen, dass a ein Zeiger ist und b eine ganze Zahl darstellt:

a[b]
*(a + b)
*(b + a)
b[a]

Gemäß den Konvertierungsregeln für den Additionsoperator (angegeben in Additive Operatoren), wird der Ganzzahlwert in einen Adressoffset konvertiert, indem Sie ihn durch die Länge des Typs multipliziert, der vom Zeiger behoben wird.

Angenommen, der Bezeichner line ein Array int-Werte verweist.Im folgenden Verfahren wird verwendet, um den Indexausdruck line[ i ]auswerten:

  1. Der ganzzahlige Wert i wird durch die Anzahl von Bytes multipliziert, die als die Länge eines int-Elements definiert werden.Der konvertierte Wert i stellt Positionen i int dar.

  2. Der konvertierte Wert wird auf den ursprünglichen Zeigerwert (line) hinzugefügt um eine Adresse zu Offset-Positionen dazu führen, dass i int von lineist.

  3. Der Dereferenzierungsoperator ist mit der neuen Adresse angewendet.Das Ergebnis ist der Wert des Arrayelements an dieser Position (intuitiv, line [ i ]).

Der Indexausdruck line[0] stellt den Wert des ersten Elements der Zeile dar, da der Offset von der Adresse, die von line dargestellte 0 ist.Gleichermaßen verweist auf ein Ausdruck wie line[5] die Positionen des Elements fünf Offset von der Zeile oder 6 Elemente des Arrays an.

Siehe auch

Referenz

Tiefgestellter Operator: []