C结构初始化和指针

C struct initialization and pointer

#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() 的 return 地址是堆上的一些内存,而不是存储对象 h1 的地址。

最初指针t指向t1的地址,后来在修改函数中,指针t指向malloc返回的内存。

t->id = 100;正在初始化 malloc 返回的内存,因此您没有看到这反映在 main when

printf("%d\n", t1.id);

被执行。