指针显示不同于预期的值

Pra*_*eep 1 c pointers function pass-by-reference

我希望以下程序的输出为5,但编译器显示20.有人可以解释一下原因吗?

 #include <stdio.h>
 int a=5;
 change1(int *p);

int main(void)
{
  int x=20,*ptr=&x;
  change1(ptr);
  printf("%d ",*ptr);
  return 0;
}
change1(int *p)
{
  p=&a;
}
Run Code Online (Sandbox Code Playgroud)

小智 5

您正在传递一个指针,这会导致该函数进行复制.要更改它,您必须将指针传递给指针.