我希望以下程序的输出为 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;
}
答案 0 :(得分:5)
您正在传递指针,这会导致该功能进行复制。为了更改它,你必须将指针传递给指针。
答案 1 :(得分:3)
如果要修改指针,则需要将指针传递给指针:
change1(&ptr);
然后:
void change1(int **p)
{
*p = &a;
}