链表节点为什么创建不成功

我的目的是创建一个节点并赋值,但一直运行不成功


#include<stdio.h>
#include<stdlib.h>
typedef struct Node{
    struct Node *next;
    int value;
}*PNODE;
typedef struct Num{
    PNODE head;
    PNODE last;
}*PNUM;
void create(PNUM p,int k);
int main(void){
    int a=10;
    PNUM p;
    create(p,a);
    printf("%d",p->head->value);
    return 0;
}
void create(PNUM p,int k){
    PNODE pnode;
    pnode=(PNODE)malloc(sizeof(PNODE));//动态分配内存 
    pnode->value=k;
    pnode->next=NULL;
    p->head=pnode;//pnode指向head 
}

PNUM p;
create(p,a);
p没有分配空间,p也没有初始化,在create函数中,p->head会崩的。