Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 :
Il valore
iintero viene moltiplicato per il numero di byte definito come lunghezza di unintelemento. Il valore convertito diirappresentaiintle posizioni.Questo valore convertito viene aggiunto al valore del puntatore originale (
line) per restituire un indirizzo che corrisponde alle posizioni di offsetiintdaline.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.