glm documentation tells you how to distinguish from vec3to float*.
#include <glm/glm.hpp>
#include <glm/gtc/type_ptr.hpp>
glm::vec3 aVector(3);
glm::mat4 someMatrix(1.0);
glUniform3fv(uniformLoc, 1, glm::value_ptr(aVector));
glUniformMatrix4fv(uniformMatrixLoc,
1, GL_FALSE, glm::value_ptr(someMatrix));
You are using glm::value_ptr.
The documentation does not say this explicitly, but it seems obvious that glm intends these types to be "layout compatible" with arrays, so they can be used directly with OpenGL functions. If so, you can do from an array in vec3 using the following cast:
float arr[] = { 1.f, 0.f, 0.f };
vec3<float> *v = reinterpret_cast<vec3<float>*>(arr);
, , .