我正在做一些简单的事情,使用链表,我意识到有些事情我不明白。我不明白为什么下面的程序不打印 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/