2016-09-27 8 views
2

Рассматривая какой-то странный код конкурса обфускации сегодня, я понял, что индексирование массива симметрично, другими словами, x[n] - это то же самое, что и n[x]. Например, рассмотрим следующий код:Почему индексирование массива симметрично по индексу и имени

#include <iostream> 

int main() 
{ 
    int x[] = {0, 1, 2, 3, 4}; 
    std::cout << x[3] << ' ' << 3[x]; // both display 3 
} 

Live on Coliru

Является ли это действительно совместим со стандартом, и если да, то есть ли веская причина, почему? И бонус, если вы можете предоставить стандартную ссылку/цитату.

PS: код компилируется нормально и с НКОЙ и лязгом

+1

Это обман. поиск ... – NathanOliver

+0

@NathanOliver Пожалуйста, закройте его, если найдете его, я был почти уверен, что должен быть еще один такой вопрос, но он не смог его найти. – vsoftco

+2

Спасибо @firststep. Добавлено в мои избранные сейчас. – NathanOliver

ответ

2

Причина заключается в том, что в C (и C++) оба выражения равны *(x + 3) == *(3 + x).

+0

С указателями да, но я вижу '[]' скорее как оператор (хотя это явно не для POD). – vsoftco

+0

C-style массивы распадаются на указатели во многих контекстах. Это один из них, я считаю. –