Condividi tramite


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 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 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 ]:

  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 i int le posizioni.

  2. Questo valore convertito viene aggiunto al valore del puntatore originale (line) per restituire un indirizzo che corrisponde alle posizioni di offset i int 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 indice inferiore: