C struct初始化和指针

时间:2015-09-21 12:20:17

标签: c pointers struct initialization malloc

#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获得所需的输出?

2 个答案:

答案 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);

已执行。