【问题标题】:C programming language equivalent for structure initialization in C++C 编程语言等效于 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);。这样,如果您将其从列表更改为其他内容,则需要更改的代码更少,而且通常更不容易出错。

标签: c++ c struct


【解决方案1】:
list *temp;
temp = malloc(sizeof(list));

[...]

free(temp);

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

【讨论】:

  • 不要在 C 中强制转换 malloc 的返回值。
  • 您的评论将我引至this answer;我学到了一些新东西。谢谢!
猜你喜欢
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-13
  • 2012-03-13
相关资源
最近更新 更多