指针显示不同于预期的值

时间:2014-07-18 12:31:01

标签: c function pointers 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;
}

2 个答案:

答案 0 :(得分:5)

您正在传递指针,这会导致该功能进行复制。为了更改它,你必须将指针传递给指针。

答案 1 :(得分:3)

如果要修改指针,则需要将指针传递给指针:

change1(&ptr);

然后:

void change1(int **p)
{
  *p = &a;
}