0
Что происходит в следующем коде?оператор [] по основным типам с аргументом указателя
int main()
{
int i = 37;
int* pi = &i;
i[pi]; //works
i[0]; //error C2109: subscript requires array or pointer type
}
Почему разрешено индексировать int с аргументом указателя и что он делает?
'i [pi]' такой же, как 'pi [i]' такой же, как '* (pi + i)' – Alex
в C++, индексирование массива явно реализовано с использованием (коммутативной) арифметики указателя (вдоль строк из '* (pi + i)'), и он остался таким, чтобы 'pi [i]' и 'i [pi]' вели себя одинаково. во втором случае запись 'i [reinterpret_cast (0)]' будет делать так, как вы ожидали, т. е. неопределенное поведение, поскольку оно разделяет нулевой указатель –
oldrinb