答:
你把断点设置在括号的位置,监视的是fun函数的形参n,而不是main函数的实参n,这个位置是fun函数调用起始的位置,在静态变量语句前要进行现场保存,返回值、形参入栈等操作;所以在括号位置,形参还没有入栈和赋值,形参n的值是没有初始化的值。这块内容是编译器自动处理的,高级语言不体现,我们通过转反汇编去看,我用的是VS2017转汇编,如下所示
这个是函数fun(n)调用,可以看到对形参的入栈和赋值在断点之后,所以断点位置的形参是个栈内未初始化值。

然后说一下main函数中的n是否消失?答案是否定的,main函数中的实参n还在栈中没有释放,它的生存周期还没有结束,只是被阻塞了,当fun函数返回后,实参n仍然有效,只有main函数返回后,实参n才会从栈中释放,他的生存周期才结束。
最后说一下k,k是全局变量,在全局变量数据区存储,是个固定的存储区域,它的生命周期在整个软件的运行过程中。当软件停止运行,它的生命周期才结束。
综合一下,有以下几个知识点。
1.局部变量存储在栈内,通过出入栈动态分配空间。对于C语言,函数返回后,局部变量出栈释放。未初始化的局部变量初始值是不确定值。
2.实参变量形参变量是两个变量,在各自的函数栈分配,入口括号位置,函数栈还没有分配好。
3.全局变量存储在全局变量段,存储位置固定,生存周期是整个软件运行期间。未初始化的全局变量为0。