Matrici unidimensionaliOne-Dimensional Arrays

Un'espressione di suffisso seguita da un'espressione tra parentesi quadre ([ ]) è una rappresentazione con indice di un elemento di un oggetto matrice.A postfix expression followed by an expression in square brackets ([ ]) is a subscripted representation of an element of an array object. Un'espressione di indice rappresenta il valore all'indirizzo che si trova a un numero di posizioni corrispondente a expression oltre postfix-expression, se espressa comeA subscript expression represents the value at the address that is expression positions beyond postfix-expression when expressed as


postfix-expression  
[  
expression  
]  

In genere, il valore rappresentato da postfix-expression è un valore puntatore, quale un identificatore di matrice, ed expression è un valore integrale.Usually, the value represented by postfix-expression is a pointer value, such as an array identifier, and expression is an integral value. Tuttavia, l'unica condizione da soddisfare dal punto di vista sintattico è che una delle espressioni sia di tipo puntatore e l'altra di tipo integrale.However, all that is required syntactically is that one of the expressions be of pointer type and the other be of integral type. Pertanto, il valore integrale può trovarsi nella posizione postfix-expression e il valore puntatore può essere racchiuso tra parentesi quadre nella posizione di expression, ovvero dell'indice.Thus the integral value could be in the postfix-expression position and the pointer value could be in the brackets in the expression, or "subscript," position. Ad esempio, questo codice è valido:For example, this code is legal:

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

Le espressioni di indice sono in genere utilizzate per fare riferimento agli elementi di matrice, ma è possibile applicare un indice a un puntatore.Subscript expressions are generally used to refer to array elements, but you can apply a subscript to any pointer. Qualsiasi sia l'ordine di valori, expression deve essere racchiusa tra parentesi ([ ]).Whatever the order of values, expression must be enclosed in brackets ([ ]).

L'espressione di indice viene valutata aggiungendo il valore integrale al valore puntatore e quindi applicando l'operatore di riferimento indiretto (\) al risultato.The subscript expression is evaluated by adding the integral value to the pointer value, then applying the indirection operator (****) to the result. Per informazioni sull'operatore di riferimento indiretto, vedere Operatori address-of e di riferimento indiretto. In effetti, per una matrice unidimensionale, le quattro espressioni seguenti sono equivalenti, supponendo che a è un puntatore e b è un Integer:(See Indirection and Address-of Operators for a discussion of the indirection operator.) In effect, for a one-dimensional array, the following four expressions are equivalent, assuming that a is a pointer and b is an integer:

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

In base alle regole di conversione per l'operatore di addizione, descritte in Operatori di addizione, il valore integrale viene convertito in un offset di indirizzo moltiplicandolo per la lunghezza del tipo a cui il puntatore fa riferimento.According to the conversion rules for the addition operator (given in Additive Operators), the integral value is converted to an address offset by multiplying it by the length of the type addressed by the pointer.

Ad esempio, si supponga che l'identificatore line faccia riferimento a una matrice di valori int.For example, suppose the identifier line refers to an array of int values. La procedura riportata di seguito viene utilizzata per valutare l'espressione di indice line[ i ]:The following procedure is used to evaluate the subscript expression line[ i ]:

  1. L'Integer i viene moltiplicato per il numero di byte definito come la lunghezza di un elemento int.The integer value i is multiplied by the number of bytes defined as the length of an int item. Il valore convertito di i rappresenta le posizioni i int.The converted value of i represents i int positions.

  2. Questo valore convertito viene aggiunto al valore di puntatore originale (line) per produrre un indirizzo con un offset di i int posizioni da line.This converted value is added to the original pointer value (line) to yield an address that is offset i int positions from line.

  3. L'operatore di riferimento indiretto viene applicato al nuovo indirizzo.The indirection operator is applied to the new address. Il risultato è il valore dell'elemento della matrice in tale posizione (intuitivamente, line [ i ]).The result is the value of the array element at that position (intuitively, 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.The subscript expression line[0] represents the value of the first element of line, since the offset from the address represented by line is 0. Analogamente, un'espressione come line[5] fa riferimento all'offset dell'elemento cinque posizioni dalla riga o al sesto elemento della matrice.Similarly, an expression such as line[5] refers to the element offset five positions from line, or the sixth element of the array.

Vedere ancheSee Also

Operatore di indice inferiore:Subscript Operator: