Matrici unidimensionali
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 expression
posizione , 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 di indice viene valutata aggiungendo il valore integrale al valore puntatore e quindi applicando l'operatore di riferimento indiretto (*
) al risultato. (Vedere Operatori di riferimento indiretto e indirizzo 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.
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 ]
:
L'Integer
i
viene moltiplicato per il numero di byte definito come la lunghezza di un elementoint
. Il valore convertito dii
rappresentai
int
le posizioni.Questo valore convertito viene aggiunto al valore del puntatore originale (
line
) per restituire un indirizzo che corrisponde alle posizioni di offseti
int
daline
.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.