Почему i[array] подобен array[i]? [дубликат]

240
29 июня 2017, 03:43

На данный вопрос уже ответили:

  • Как работает &0[hello]? 5 ответов

Не совсем понятно:

int i;
int array[anySize];

Почему запись arr[i] эквивалентна i[arr]?

Answer 1

Потому как все равно "за сценой" все это преобразуется в указатель с помощью арифметики arr+i, а как известно, a+b == b+a :)

Answer 2

arr это просто указатель на первый элемент массива (arr == &arr[0]) То есть arr[i] == *(&arr[0] + i). Это просто синтаксический сахар, который и так работает. Я думаю вы поторопились, в книге по которой вы изучаете язык просто обязано быть об этом.

Answer 3

Потому что стандарт. Смотрите пункт 5.2.1:

A postfix expression followed by an expression in square brackets is a postfix expression. One of the expressions shall have the type “array of T” or “pointer to T” and the other shall have unscoped enumeration or integral type. The result is of type “T.” The type “T” shall be a completely-defined object type.64 The expression E1[E2] is identical (by definition) to *((E1)+(E2)) [ Note: see 5.3 and 5.7 for details of * and + and 8.3.4 for details of arrays. — end note ], except that in the case of an array operand, the result is an lvalue if that operand is an lvalue and an xvalue otherwise.

Гугл-переводчик:

Постфиксное выражение, за которым следует выражение в квадратных скобках, является постфиксным выражением. Одно из выражений должно иметь тип «массив Т» или «указатель на Т», а другой должен иметь неперечисленное перечисление или интегральный тип. Результат имеет тип «T». Тип «T» должен быть полностью определенным типом объекта. Выражение E1 [E2] идентично (по определению) к * ((E1) + (E2)) [Примечание: См. 5.3 и 5.7 для деталей * и + и 8.3.4 для получения подробной информации о массивах. - end note], за исключением того, что в случае операнда массива результат равен lvalue, если этот операнд является lvalue и xvalue в противном случае.

READ ALSO
shared_ptr ошибка при линковке c++

shared_ptr ошибка при линковке c++

pastebincom - исходный код заголовочного файла с реализацией shared_ptr

218
Ограничение выбора в календарной форме

Ограничение выбора в календарной форме

Можно ли в календарной форме datepicker ограничить возможность выбора только определенным днем недели? Средствами из коробки, так сказатьВ документации...

335
Здравствуйте, как заменить input [type=submit] на button [type=submit]?

Здравствуйте, как заменить input [type=submit] на button [type=submit]?

Здравствуйте, как заменить input [type=submit] на button [type=submit] через javascript, input кнопки невидимы и обычным способом их не заменить, а требуется сделать...

385