gpt4 book ai didi

c - C 中的简单指针问题 - 错误值

转载 作者:太空宇宙 更新时间:2023-11-04 00:27:08 24 4
gpt4 key购买 nike

我正在做一些简单的事情,使用链表,我意识到有些事情我不明白。我不明白为什么下面的程序不打印 3(它打印一个随机数)。我认为我在运行时没有出现任何错误并且 y 不为 NULL 也很奇怪。

struct ceva
{
int y;
};

typedef struct ceva str;

void do_something(str *x)
{
str *p = (str *)malloc (sizeof (str));
p->y = 3;
x = p;
}

int main(void)
{
str *y;
do_something (y);
printf ("%d", y->y);
}

最佳答案

您将 str x 按值传递给函数 do_something

改变 do_something 中的 x 不会改变 main 函数中的 y。要么按如下方式传递对 y 的引用:

void do_something(str **x)
{
str *p = (str *)malloc (sizeof (str));
p->y = 3;
*x = p;
}

int main(void)
{
str *y;
do_something (&y);
printf ("%d", y->y);
}

或者让函数do_something返回它分配的结构的地址:

以下是在 C 中执行此操作的常用方法。

str *do_something(void)
{
str *p = (str *)malloc (sizeof (str));
if (p) // ensure valid pointer from malloc.
{
p->y = 3;
}
return p;
}

int main(void)
{
str *y = do_something (y);
printf ("%d", y->y);
}

关于c - C 中的简单指针问题 - 错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5365111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com