This is funny and simple. -array[2] is the same as -*(array + 2), which is the same as -*(2 + array) which is the same as -2[array], which is -30.
There is already a duplicate for general case of using square brackets with arrays (With arrays, why is it the case that a[5] == 5[a]?), but the quirk here is the unary - operator in front.
It might seem intuitive to assume that the actual array index would be -2, like array[-2].
But this is not happening due to operator precedence rules:
operator [] has higher precedence than unary -, and as such is applied first.
I've shown the tranformation with 'conventional' array subscription to make this more intuitive
- as we do not negate the array before subscripting it, we do not negate 2 the same way.