Есть небольшой вопрос с подвохом, который некоторые интервьюеры любят задавать по любой причине:
int arr[] = {1, 2, 3};
2[arr] = 5; // does this line compile?
assert(arr[2] == 5); // does this assertion fail?
Насколько я понимаю, a[b]
преобразуется в *(a + b)
, и, поскольку сложение является коммутативным, их порядок на самом деле не имеет значения, поэтому 2[a]
на самом деле *(2 + a)
, и это работает нормально.
Гарантировано ли, что это работает по спецификациям C и/или C++?
a
не определено (поскольку ваше объявление объявляетarr
, а неa
), но я думаю, что все понимают, о чем вы на самом деле спрашиваете... - person Chris Dodd   schedule 22.02.2011