c语言 - 为什么指针的值仍然是 20?


void func(char *p)
{
    int q = 13;
    p = &q;
    printf("%dn", *p);
}
void main(void)
{
    int var = 20;
    int *p = &var;
    printf("%dn", *p);
    func(p);
    printf("%dn", *p);
}

为什么在函数退出时指针仍然是 20?当func()结束时,我在跳跃,指针在其中被修改,在最后一个printf()*p值将指向堆栈中的一些随机内容。

你所拥有的是这个

void func(char *p)
{
    int q = 13;
    p = &q;
}

这意味着"使p指向q"并更改p的值,这只是函数内部的一个变量。函数外部不会反映任何变量值更改。

如果你要写这个

void func(char *p)
{
    int q = 13;
    *p = q;
}

这意味着"使p指向的变量将其值更改为 13",这将在外面看到,这意味着 main 中var变量将更改其值(取决于字节序,因为它是 int 而不是指针声称的字符(。

如果你想在 main 中更改指针的值,你需要一个双指针:

void func(char **p)
{
    int q = 13;
    *p = &q;
    printf("%dn", *p);
}

这意味着"使p指向的指针指向局部变量q",在这种情况下,您将有一个悬空的指针,如您在main中预期的那样。

不,p本身传递的是值。对func()内部p所做的任何更改都不会反映回main()

为了完整起见,对p所指的值所做的任何更改(即*p(都将反映在main()中。

相关内容

  • 没有找到相关文章

最新更新