C 编程语言等效于 C++ 中的结构初始化

Posted

技术标签:

【中文标题】C 编程语言等效于 C++ 中的结构初始化【英文标题】:C programming language equivalent for structure initialization in C++ 【发布时间】:2019-10-13 21:10:21 【问题描述】:

假设列表是某种结构

list *temp;
temp = new list;

以上是 c++ 中的,这在 C 中是否有等价物?

【问题讨论】:

没有真正的方法可以实现这一点,因为 c 不是面向对象的,所以你不能有构造函数,但你可以创建初始化结构的函数并像构造函数一样返回其指针 在 C 中,我会这样做:list* temp; temp = malloc(sizeof(list)); list_init(temp); 我喜欢list *temp = malloc(sizeof *temp);。这样,如果您将其从列表更改为其他内容,则需要更改的代码更少,而且通常更不容易出错。 【参考方案1】:
list *temp;
temp = malloc(sizeof(list));

[...]

free(temp);

C 没有new 关键字——你必须手动分配和释放你想要使用的内存。 new 也做了一些 work behind the scenes,比如调用构造函数并返回正确的指针类型 - malloc 没有涵盖这些,必须由程序员处理。

【讨论】:

不要在 C 中强制转换 malloc 的返回值。 您的评论将我引至this answer;我学到了一些新东西。谢谢!

以上是关于C 编程语言等效于 C++ 中的结构初始化的主要内容,如果未能解决你的问题,请参考以下文章

C++中的结构体定义问题

C++ typedef struct 等效于 C#

C语言结构体指针定义问题 - C / C++ -

急求c语言 dev c++) 利用结构体做一个小系统,为啥直接无法编译运行?

c语言如何对结构体某一成员初始化

C ++中复杂结构的python 3中的等效数据结构