If I'm not mistaken, this is because square brackts have a higher precedence than dot operators (obj.member) and arrow operators (obj->member).

This means, if we had something like "obj->member[N]", the Nth index of member would be accessed, before getting the reference to that member ("obj->member"). To avoid this, we can use parentheses, which have an even higher precedence than square brackets. This way we can access the Nth index after getting the pointer to the member.

I hope this was somehow understandable even though my English is clumsy.