【发布时间】:2021-12-12 18:26:59
【问题描述】:
// Define Person
typedef struct Person {
char *name;
int age;
} person_t;
// Init person in heap
person_t *create_person_v1(char *name, int age)
{
person_t *person = calloc(1, sizeof(person_t));
person->name = name;
person->age = age;
return person;
}
// Init person on stak? a static struct I guess?
person_t create_person_v2(char *name, int age)
{
return (person_t) {name, age};
}
上面的代码有一个 Person 的定义和两个用于进一步初始化的辅助函数。
我不太了解它们之间的区别,以及各有什么好处?
它不仅仅是访问器-> 和. 吗?
【问题讨论】:
-
无关:您正在复制
name指针,因此您最终有两种访问名称的方式(通过调用代码中使用的原始指针和通过结构)。通过任何这些方式对name所做的任何更改将在通过其他方式访问name时反映。也许您想改用malloc()和strcpy()? -
create_person_v1返回一个指向person_t的指针,而create_person_v2返回一个person_t。这是根本不同的。如果你在理解这一点上有困难,我强烈建议你再读一遍你的 C 学习资料中处理指针的那一章。 -
@Jabberwocky 我很确定 PO 了解两者之间的技术差异,但不了解功能差异。很多课程都停在第一点。
-
@pmg 是的,你是对的。我可以以某种方式破坏第一个指针吗?只是为了
-
有趣的事情:标准对“堆栈”或“堆”一无所知......
标签: c struct types heap-memory difference