#include <stdio.h>
typedef struct hello{
int id;
}hello;
void modify(hello *t);
int main(int argc, char const *argv[])
{
hello t1;
modify(&t1);
printf("%d\n", t1.id);
return 0;
}
void modify(hello *t)
{
t = (hello*)malloc(sizeof(hello));
t->id = 100;
}
为什么程序输出100
?这是malloc
的问题吗?我不知道初始化结构。
如何仅通过编辑modify
获得所需的输出?
答案 0 :(得分:3)
void modify(hello *t)
{
t = (hello*)malloc(sizeof(hello));
t->id = 100;
}
应该是
void modify(hello *t)
{
t->id = 100;
}
内存已经静态分配给h1
,你在堆上创建内存并写入内存。
因此传递给函数的地址被malloc()
覆盖
malloc()
的返回地址是堆上的一些内存,而不是对象h1
的存储地址。
答案 1 :(得分:0)
最初指针t指向t1的地址,稍后在修改函数中,指针t指向malloc返回的内存。
t-&gt; id = 100;正在初始化malloc返回的内存,因此当
时,你没有看到它反映在main中printf(“%d \ n”,t1.id);
已执行。