In version a) you declare a vector. In version b) you declare not a vector, but an empty pointer. Using empty pointers in functions will CRASH. So, there is no sample code for b) unless you want to learn how to crash the engine.
Sample code for a:
function foo()
{
VECTOR v;
vec_set(v,vector(1,2,3));
vec_add(v,v);
...
}
and so on...
When you really want to use pointers, you must always let those pointers point to something... otherwise, CRASH!!
VECTOR* v; // empty pointer, points to nothing
vec_set(v,vector(1,2,3)); // crash!
but
VECTOR* v = { x = 0; y = 0; z = 0; } // now v points to a real vector
vec_set(v,vector(1,2,3)); // no crash!
Hope this helps..