struct CUBE{
int x;
int y;
int z;
}

void* p;

static void g(void *p);

main(){
CUBE *c;
c->x = 10;
c->y = 20;
c->z = 30;
g(p);
printf("体積%d",(CUBE*)p->x * (CUBE*)c->y * (CUBE*)c->z);
}

g(void *p){
p = c;
}

これでpをcと同じ感覚で使える……と思いきや
printfのところで「NULLポインタを通じた参照」となってしまいます。
pはグローバルなのになぜでしょうか?