Condividi tramite


One-Dimensional matrici

Un'espressione di prefisso seguita da un'espressione tra parentesi quadre ([ ]) è una rappresentazione in pedice di un elemento di un oggetto matrice. Un'espressione pedice rappresenta il valore in corrispondenza dell'indirizzo che si trova expression oltre postfix-expression quando espresso come

postfix-expression [ expression ]

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

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

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

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

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

Le regole di conversione per l'operatore di addizione vengono fornite negli operatori additivi. Per convertire il valore integrale in un offset di indirizzo, viene moltiplicato per la lunghezza del tipo a cui punta il puntatore.

Si supponga, ad esempio, che l'identificatore line faccia riferimento a una matrice di int valori. La procedura seguente viene usata per valutare l'espressione line[ i ]pedice :

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

  2. Questo valore convertito viene aggiunto al valore del puntatore originale (line) per restituire un indirizzo che corrisponde alle posizioni di offset iint da line.

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

L'espressione line[0] indice 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.

Vedere anche

Operatore indice secondario: