kurono, Jan is correct of course, but if you want to save some space wrt the colours then look into GL_UNSIGNED_BYTE. You can then effectively squeeze your 4 colour components into the same space as one float.
As you learn more about OpenGL you’ll find other ways to save also, perhaps using Geometry shaders and / or other clever / novel ways of storing your vertex data.
To answer your pointer problem…
I am not sure what you are doing above but a pointer will advance through memory each time you increment it by exactly the size of the unit it is a pointer for… So what you are doing will leave huge spaces between each unit of data as adding the sizeof(GLfloat) to the pointer will actually add sizeof(GLfloat) * sizeof(GLfloat) to your pointer because each integer you add to it is worth one GLFloat already!!
So if the start of your colour array is pointed to by bp and it is a GLfloat* then this should work fine…
*bp++ = r;
*bp++ = g;
*bp++ = b;
Alternatively you could do this…
*bp = r;
*(bp+1) = g;
*(bp+2) = b;
The brackets around bp tell it that it should add 1 unit (a GLfloat) to it’s address, and then the * infront of the brackets says that we should store our colour value into the address pointed to by the expression inside the bracket.
Hope that helps.
One other pitfall to be aware of is that OpenGL pointer commands, such as glVertexPointer etc. use byte size offsets for all their stride sizes etc. That may or may not be something that affects you at the moment, but do keep it at the back of your mind if you start looking at using interleaved vertex, colour, texcoord data…