Поделиться через


Одномерные массивы

Выражение постфикса, за которым следует выражение в квадратных скобках ([ ]) — это подстрочный представление элемента объекта массива. Выражение подстрочного символа представляет значение по адресу, который находится 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 ] используется следующая процедура:

  1. Целочисленное значение i умножается на количество байт, определенное как длина элемента int. Преобразованное значение i представляет позиции i int.

  2. Это преобразованное значение добавляется к исходному значению указателя (line) для получения адреса, представляющего позиции, смещенные на i int относительно line.

  3. Оператор косвенного обращения применяется к новому адресу. Результат представляет собой значение элемента массива в этой позиции (интуитивно, line [ i ]).

Выражение индекса line[0] представляет значение первого элемента массива line, поскольку смещение от адреса, представляемого line, равно 0. Аналогично, выражение line[5] ссылается на элемент, смещенный на 5 позиций относительно line, или на шестой элемент массива.

См. также

Subscript Operator (Подстрочный оператор)