En realidad es sin el asterisco (*)...
int punt::a = NULL;
Ahí asignas que el puntero es NULL osea que no apunta a nada, en tu caso estabas asignando que el valor de la dirección donde apunta es NULL.
antes de tratar "enseñar" a los demás deberías leer un poco

Hola , al intentar solucionar un problema de un puntero que uso con muchos objetos, lo puse estatico pero el compilador no me deja siquiera definirlo .
Sera que el operador static no puede ser aplicado a un puntero ?¿
EDIT: Me autorespondo . Ya encontré como solucionarlo , era algo muy simple....
si tenia un miembro estatico como puntero ej
class punt
{
public:
static int *a;
};
// la forma de definirlo era asi
int *punt::a = NULL;
// Y no
int punt::*a; // Como estaba intentando :¬¬

La sintaxis de los miembros estáticos es: "
<type> <class_name>::<static_variable>;" o "
<type> <class_name>::<static_variable> = <value>;" si quieres darle un valor inicial, por lo tanto en tu caso quedaría:
int* punt::a;
o
int* punt::a=NULL;
S2
EDIT: con respecto al acceso, sigue las mismas reglas que los miembros no estáticos (solo para miembros, no para métodos estáticos)