Why is there so many macros in OpenGL? I would just like to know why are there so many things defined as macros that point to memory addresses in OpenGL? 

I see them all over the place. For example when I go to choose parameters for a function such as glDrawArrays(), I have to choose a mode like GL_TRIANGLES as the first parameter which is a macro like all the others.
These aren't macros pointing to memory addresses. They're just integer preprocessor constants. Back in the days when OpenGL originated, using preprocessor constants for your numeric constants was common practice in C.

Nowadays it's considered better practice to define new types (single-element structs) for your constants, but it's too late to change OpenGL.