RE:Almacenar en un long dos int
No necesariamente los int son de 2 bytes y los longs de 4, por lo menos no está garantizado por el estándar (y dado que no mencionas qué compilador empleas, no hay forma de saber de antemano).
En fin, asumamos que tu aseveración es cierta.
En tal caso, puedes emplear memncpy.
int x = 10;
int y = 20;
long coord = 0L;
memncpy(&coord, &x, 2);
memncpy(&coord + 2, &y, 2);
Con la primera llamada a memncpy, copiamos los dos bytes de x iniciando en la posición 0 (primer byte) de coord. La segunda llamada copia los tercer y cuarto bytes iniciando en la posición 2 (tercer byte) de coord. Y listo.
Sin embargo no entiendo qué quieres lograr al complicarte la vida de esta manera. Es más facil crear una estructura:
struct Coord { int x; int y; };
y listo. Las estructuras de C (y las estructuras de C++ que sean POD) almacenan sus variables en direcciones contínuas de memoria, así que (sin tomar en cuenta cuestiones de alineación de bits) mi estructura Coord mide (bajo el escenario que propusiste) los mismos bytes que tu variable long.
Saludos.