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);
被执行。
#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);
被执行。