如果已经有了答案,可以随意将其复制,因为我还没有找到答案。
这是代码(第一个代码):
#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
?
[我是说,据我所知,要更改val
的boi
,需要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;
}
Boi指向具有val 5的堆中的内存位置(例如0x1233)。您在chg函数中传递了相同的内存位置(0x1233),并将同一堆位置的值修改为9。这就是为什么您看到boi的原因-> val为9。