Subscripting is allowed on arrays that are not lvalues, even though the unary “&” operator is not. For example, this is valid in GNU C though not valid in other C dialects:
struct foo {int a[4];}; struct foo f(); bar (int index) { return f().a[index]; }