C结构初始化和指针

标签 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;
}

为什么程序不输出100malloc 有问题吗?我不知道要初始化该结构。

如何仅通过编辑 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/

相关文章:

ios - Objective-C 属性和指向 Swift 的指针

c++为什么这个循环有缺陷以将数据读入结构数组?

c - struct args 中的函数指针?

计算标签数并检查行长度

python - 从 Cython 将原始指针传递给 C 函数

c - 使用 PCRE 正则表达式的奇怪答案

c++ - 单链表时间

c - 数组的数组,具有不同的大小

c++ - 接受用户输入的字符并按出现的降序显示它们的程序

c - 使用多维数组 C 求 5 个学生的平均值