Читать надо именно по указателю. Берёшь значение, которое хранится в 0xBA18FC, и к нему прибавляешь 0x48.
И вообще, проще обращатся к полям через сишные структуры
struct stVehicle
{
unsigned char _bPad[0x44];
float fSpeed[3]; // AKA CVector
};
/// -------------
stVehicle *pSelfVehicle = (*((stVehicle **)0xBA18FC))