void func(char *p)
{
int q = 13;
p = &q;
printf("%d\n", *p);
}
void main(void)
{
int var = 20;
int *p = &var;
printf("%d\n", *p);
func(p);
printf("%d\n", *p);
}
为什么在函数退出时指针仍然是 20?
当 func()
结束时,我正在跳跃,指针在其中被修改,在最后一个 printf()
中, *p
值将从堆栈中指向一些随机的东西。
最佳答案
你有的是这个
void func(char *p)
{
int q = 13;
p = &q;
}
这意味着“使 p 指向 q”并更改 p
的值,它只是函数内部的一个变量。函数外不会反射(reflect)变量值的变化。
如果你要写这个
void func(char *p)
{
int q = 13;
*p = q;
}
这意味着“使 p
指向的变量将其值更改为 13”,这将在外部可见,这意味着 main 中的变量 var
将更改它的值(取决于字节顺序,因为它是 int 而不是指针声称的 char)。
如果你想在 main 中改变指针的值,你需要一个双指针:
void func(char **p)
{
int q = 13;
*p = &q;
printf("%d\n", *p);
}
这意味着“使 p
指向的指针指向局部变量 q
”,在这种情况下,您将有一个悬空指针,如您所期望的主要
。
关于c - 为什么指针的值还是20?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55354510/