Matrici unidimensionali

Un'espressione postfix seguita da un'espressione tra parentesi quadre ([ ]) è una rappresentazione di un elemento di un oggetto array. Un'espressione di sottoscrizione rappresenta il valore all'indirizzo che si expression trova oltre postfix-expression quando espresso come

postfix-expression [ expression ]

In genere, il valore rappresentato da postfix-expression è un valore puntatore, ad esempio un identificatore di matrice ed expression è un valore integrale. Tuttavia, tutto ciò che è necessario sintatticamente è che una delle espressioni ha tipo puntatore e l'altro ha tipo integrale. Il valore integrale potrebbe trovarsi nella postfix-expression posizione e il valore del puntatore potrebbe trovarsi tra parentesi quadre nella expressionposizione o "sottoscript". Ad esempio, questo codice è valido:

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

Le espressioni di sottoscrizioni vengono spesso usate per fare riferimento agli elementi della matrice, ma è possibile applicare un descrittore a qualsiasi puntatore. Qualunque sia l'ordine dei valori, expression deve essere racchiuso tra parentesi quadre ([ ]).

L'espressione di indice viene valutata aggiungendo il valore integrale al valore puntatore e quindi applicando l'operatore di riferimento indiretto (*) al risultato. Per una discussione sull'operatore indiretto , vedere Indiretto e Address-of Operator . In effetti, per una matrice unidimensionale, le quattro espressioni seguenti sono equivalenti, presupponendo che a sia un puntatore e b sia un intero:

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

Le regole di conversione per l'operatore di aggiunta vengono fornite in Operatori additivi. Per convertire il valore integrale in un offset di indirizzi, viene moltiplicato in base alla lunghezza del tipo indirizzato dal puntatore.

Ad esempio, si supponga che l'identificatore line faccia riferimento a una matrice di valori int. La procedura riportata di seguito viene utilizzata per valutare l'espressione di indice line[ i ]:

  1. L'Integer i viene moltiplicato per il numero di byte definito come la lunghezza di un elemento int. Il valore convertito di i rappresenta le posizioni iint.

  2. Questo valore convertito viene aggiunto al valore di puntatore originale (line) per produrre un indirizzo con un offset di iint posizioni da line.

  3. L'operatore di riferimento indiretto viene applicato al nuovo indirizzo. Il risultato è il valore dell'elemento della matrice in tale posizione (intuitivamente, line [ i ]).

L'espressione di indice line[0] rappresenta il valore del primo elemento della riga, poiché l'offset dall'indirizzo rappresentato da line è 0. Analogamente, un'espressione come line[5] fa riferimento all'offset dell'elemento cinque posizioni dalla riga o al sesto elemento della matrice.

Vedi anche

Operatore di sottoscrizione: