Итак, есть этот маленький трюк, который некоторые интервьюеры любят спрашивать по любой причине:
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 и/или С++?