fun函数内delete p后,main里面a为什么没有置为NULL

执行完fun后为什么a没有被置为NULL?
void fun(int* p)
{
cout<< "Fun:p=" << p <<endl;
cout<< "Fun:&p=" << &p <<endl;
delete p;
p = NULL;
}

int main()
{

int *a = new int(3);
fun(a);
cout<< "main:a=" << a <<endl;
cout << "*a="<<*a<<endl; 

return 0;

}

这个问题是c++比较基础的指针问题了
实现方式1:


void fun(int** p)
{
   cout<< "Fun:p=" << p <<endl;
   cout<< "Fun:*p=" << *p <<endl;
   cout<< "Fun:**p=" << **p <<endl;
   delete *p;
   *p = NULL;
}
int main()
{
   int *a = new int(3);
   cout<< "main:a=" << a <<endl;
   fun(&a);
   cout<< "main:a=" << a <<endl;
   //这里a已经是NULL了
   //cout << "*a="<<*a<<endl;
   return 0;
}

实现方式2:


#define fun(p) do{ \
    cout<< "Fun:p=" << p <<endl; \
    cout<< "Fun:*p=" << *p <<endl; \
    delete p; \
    p = NULL; \
}while(0)

int main()
{
   int *a = new int(3);
   cout<< "main:a=" << a <<endl;
   fun(a);
   cout<< "main:a=" << a <<endl;
   //这里a已经是NULL了
   //cout << "*a="<<*a<<endl;
   return 0;
}

new 出来的空间应该是被delete掉了,p是a的一个拷贝,p=NULL后,a并没有被置为NULL,这个我理解了, 但是我不想在main函数里释放a, 想在fun函数内释放并把释放后的内存置为NULL,该怎么处理?