Tablice jednowymiarowe
Wyrażenie postfiksu, po którym następuje wyrażenie w nawiasach kwadratowych ([ ]
) jest reprezentacją w indeksie dolnym elementu obiektu tablicy. Wyrażenie indeksu dolnego reprezentuje wartość w adresie, który znajduje się poza postfix-expression
wartością, gdy jest expression
wyrażona jako
postfix-expression
[
expression
]
Zazwyczaj wartość reprezentowana przez postfix-expression
element jest wartością wskaźnika, taką jak identyfikator tablicy, i expression
jest wartością całkowitą. Jednak wszystko, co jest wymagane składniowo, jest to, że jeden z wyrażeń ma typ wskaźnika, a drugi ma typ całkowity. Wartość całkowita może znajdować się w postfix-expression
pozycji, a wartość wskaźnika może znajdować się w nawiasach w pozycji , lub "indeksu expression
dolnego". Na przykład ten kod jest legalny:
// one_dimensional_arrays.c
int sum, *ptr, a[10];
int main() {
ptr = a;
sum = 4[ptr];
}
Wyrażenia indeksu dolnego są często używane do odwoływania się do elementów tablicy, ale można zastosować indeks dolny do dowolnego wskaźnika. Niezależnie od kolejności wartości, expression
musi być ujęta w nawiasy kwadratowe ([ ]
).
Wyrażenie indeksu dolnego jest obliczane przez dodanie wartości całkowitej do wartości wskaźnika, a następnie zastosowanie operatora pośredniego (*
) do wyniku. (Zobacz Operatory pośrednie i adresowe na potrzeby dyskusji na temat operatora pośredniego). W przypadku tablicy jednowymiarowej następujące cztery wyrażenia są równoważne, przy założeniu, że a
jest to wskaźnik i b
jest liczbą całkowitą:
a[b]
*(a + b)
*(b + a)
b[a]
Reguły konwersji dla operatora dodawania są podane w operatorach dodawania). Aby przekonwertować wartość całkowitą na przesunięcie adresu, jest on mnożony przez długość typu adresowanego przez wskaźnik.
Załóżmy na przykład, że identyfikator line
odwołuje się do tablicy int
wartości. Poniższa procedura służy do oceny wyrażenia line[ i ]
indeksu dolnego :
Wartość
i
całkowita jest mnożona przez liczbę bajtów zdefiniowanych jako długośćint
elementu. Przekonwertowana wartośći
reprezentujei
int
pozycje.Ta przekonwertowana wartość jest dodawana do oryginalnej wartości wskaźnika (
line
) w celu uzyskania adresu, który jest przesunięciei
int
pozycji zline
.Operator pośredni jest stosowany do nowego adresu. Wynikiem jest wartość elementu tablicy na tej pozycji (intuicyjnie,
line [ i ]
).
Wyrażenie line[0]
indeksu dolnego reprezentuje wartość pierwszego elementu wiersza, ponieważ przesunięcie z adresu reprezentowanego przez line
wartość wynosi 0. Podobnie wyrażenie, takie jak line[5]
odnosi się do elementu przesunięcia pięciu pozycji z wiersza lub szóstego elementu tablicy.