Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Выражение постфикса, за которым следует выражение в квадратных скобках ([ ]
) — это подстрочный представление элемента объекта массива. Выражение подстрочного символа представляет значение по адресу, который находится expression
за postfix-expression
пределами позиции при выражении как
postfix-expression
[
expression
]
Как правило, значение, представленное postfix-expression
указателем, например идентификатором массива, и expression
является целочисленным значением. Однако все, что требуется синтаксически, заключается в том, что один из выражений имеет тип указателя, а другой имеет целочисленный тип. Целочисленное значение может находиться в позиции, а значение указателя может находиться в postfix-expression
квадратных скобках в expression
позиции или "подстрочный". Например, такой код является допустимым:
// one_dimensional_arrays.c
int sum, *ptr, a[10];
int main() {
ptr = a;
sum = 4[ptr];
}
Выражения подстрочного индекса часто используются для ссылки на элементы массива, но можно применить подстрок к любому указателю. Независимо от порядка значений, expression
должны быть заключены в квадратные скобки ([ ]
).
Выражение индекса вычисляется путем добавления целочисленного значения к значению указателя, а результат передается в оператор косвенного обращения (*
). (См. раздел Непрямая и адресная часть операторов для обсуждения оператора косвенного обращения.) В действительности для одномерного массива следующие четыре выражения эквивалентны, предполагая, что a
это указатель и b
является целым числом:
a[b]
*(a + b)
*(b + a)
b[a]
Правила преобразования для оператора сложения задаются в операторах аддитивных данных). Чтобы преобразовать целочисленное значение в смещение адреса, оно умножается на длину типа, адресованного указателем.
Например, предположим, что идентификатор line
ссылается на массив значений int
. Для вычисления выражения индекса line[ i ]
используется следующая процедура:
Целочисленное значение
i
умножается на количество байт, определенное как длина элементаint
. Преобразованное значениеi
представляет позицииi
int
.Это преобразованное значение добавляется к исходному значению указателя (
line
) для получения адреса, представляющего позиции, смещенные наi
int
относительноline
.Оператор косвенного обращения применяется к новому адресу. Результат представляет собой значение элемента массива в этой позиции (интуитивно,
line [ i ]
).
Выражение индекса line[0]
представляет значение первого элемента массива line, поскольку смещение от адреса, представляемого line
, равно 0. Аналогично, выражение line[5]
ссылается на элемент, смещенный на 5 позиций относительно line, или на шестой элемент массива.
См. также
Subscript Operator (Подстрочный оператор)