nesvarbu:
it is true that a three dimensional array is a triple pointer
typeof(points) == GLfloat * * *
however, if you specify array offsets, those pointers get dereferenced
typeof(points[0]) == GLfloat * * (equivalent to *(points+0))
typeof(points[0][0]) == GLfloat * (equivalent to *(*(points+0)+0))
typeof(points[0][0][0]) == GLfloat (equivalent to *(*(*(points+0)+0)+0))
the compiler might be having trouble with the order of operations, perhaps you should try this syntax:
now you dereference the triple pointer first and take the address of the result
typeof(&(points[0][0][0])) == GLfloat * (equivalent to &(*(*(*(point+0)+0)+0)))