C中的指针内部功能

MrT*_*Man 0 c pointers

#include<stdio.h>

int q = 10;

void fun(int *p){
    *p = 15;
    p = &q;
    printf("%d ",*p);
}    

int main(){
  int r = 20;
  int *p = &r;  
  fun(p);
  printf("%d", *p);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在玩指针.无法理解这个的输出.输出为10 15.一旦p指向q的地址,为什么在返回main函数时它的值会发生变化?也是为什么它改为在'10'之前的函数中赋值给它的值'15'.

P.P*_*.P. 5

因为pfun()不一样pmain().p,在每个功能中,是本地的.因此改变一个不会影响其他人.