Это то же самое, что и следующее:
// The array "char b[2]" "decays" to a pointer "char *b"
void foo(char *b)
{
// b[0] == a[0]
// also, b == a (two addresses, both the same)
}
Вы можете прочитать о том, как массивы и указатели в C ведут себя очень похожим образом (но не точно то же самое). Массивы распадаются на указатели, если они являются аргументами функции (но не где-либо еще). Реальный улов здесь заключается в том, что в 64-битной системе sizeof(b) == 8
и sizeof(a) == 2
, что несколько удивительно, если вы не знаете о массивах, распадающихся на указатели.