当arg不同时为什么此代码的结果相同?

问题描述 投票:0回答:1

如果已经有了答案,可以随意将其复制,因为我还没有找到答案。

这是代码(第一个代码):

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
    int val;
} yay;

yay* New (int val)
{
    yay *Node=(yay*) malloc (sizeof (yay));
    Node->val=val;

    return Node;
}

void chg (yay *lol) {lol->val=9;}

int main ()
{
    yay *boi=New (5);
    printf ("%d\n", boi->val);
    chg (boi);
    printf ("%d\n", boi->val);

    return 0;
}

上面代码的结果是:

5
9

我的问题是,为什么不是

5
5

[我是说,据我所知,要更改valboi,需要void chg (yay **lol)中的chg (&boi);main (),而不是void chg (yay *lol)。我显然不太了解指针。

与这个(第二个代码)有什么区别?

...
void chg (yay **lol) {(*lol)->val=9;}

int main ()
{
    yay *boi=New (5);
    printf ("%d\n", boi->val);
    chg (&boi);
    printf ("%d\n", boi->val);

    return 0;
}
c function pointers struct parameter-passing
1个回答
0
投票

Boi指向具有val 5的堆中的内存位置(例如0x1233)。您在chg函数中传递了相同的内存位置(0x1233),并将同一堆位置的值修改为9。这就是为什么您看到boi的原因-> val为9。

© www.soinside.com 2019 - 2024. All rights reserved.