2016-07-01 2 views
0

Что происходит в следующем коде?оператор [] по основным типам с аргументом указателя

int main() 
{ 
    int i = 37; 
    int* pi = &i; 
    i[pi]; //works 
    i[0]; //error C2109: subscript requires array or pointer type 
} 

Почему разрешено индексировать int с аргументом указателя и что он делает?

+0

'i [pi]' такой же, как 'pi [i]' такой же, как '* (pi + i)' – Alex

+1

в C++, индексирование массива явно реализовано с использованием (коммутативной) арифметики указателя (вдоль строк из '* (pi + i)'), и он остался таким, чтобы 'pi [i]' и 'i [pi]' вели себя одинаково. во втором случае запись 'i [reinterpret_cast (0)]' будет делать так, как вы ожидали, т. е. неопределенное поведение, поскольку оно разделяет нулевой указатель – oldrinb

ответ

Смежные вопросы