If you are already storing a in IdDict you should be fine.
You don’t need to/should’t go too complicated, just do a simple
float f(float *p)
{
return p[0];
}
and do your ccall(:f, Cfloat, (Ptr{Cfloat},), a) or ccall(:f, Cfloat, (Ptr{Cfloat},), pointer(a)) (making sure a is in the IdDict for the second case) and see if you get the answer you expect by comparing it to a[1].