新手请问关于函数和指针有关问题

新手请教关于函数和指针问题
void f(char**p)
{
  char a='M';
  *p=&a;
}
int main(void)
{
  char*string=NULL;
  f(&string);
  printf("%c",*string);
  system("Pause");
  return 0;
}
运行后会print出“M”,我想问一下,声明的函数在执行完以后函数内部的a应该不存在了吧?如果不存在的话那string指向的内存为何还能显示出声明的函数内部的“M”?

------解决方案--------------------
探讨

我还是没明白啊,声明的函数执行完了以后内部的变量a应该不存在了吧?那最后显示结果可以用*string打印出"M",那请问这个字符"M"到底存放在那个块内存?string指向哪块内存?应该不是指向内部变量a吧?