#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
获得所需的输出?
最佳答案
void modify(hello *t)
{
t = (hello*)malloc(sizeof(hello));
t->id = 100;
}
应该是
void modify(hello *t)
{
t->id = 100;
}
内存已经静态分配给 h1
,您再次在堆上创建内存并写入它。
所以传递给函数的地址被malloc()
覆盖
malloc()
的返回地址是堆上的一些内存,而不是对象 h1
存储的地址。
关于C结构初始化和指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32695089/