【问题标题】:C- Structure within structureC-结构中的结构
【发布时间】:2013-09-04 16:08:39
【问题描述】:

如果我有这些结构:

struct rec {
 int key;
 double value;
};

struct node {
 struct rec record;
 struct node *next;
};

我必须将项目 struct rec *r 的字段值复制到项目 struct node *n 中,

我可以这样做吗?

n->record.key = r->key;
n->record.value = r->value;

【问题讨论】:

  • 直接的答案是否定的,但这仅仅是因为您的会员被称为record,而不是rec。使用正确的成员名称,是,您可以这样做,但还有更好的方法(见下文)。
  • 你是对的,现在我已经更正了文字!

标签: c structure


【解决方案1】:

是的,您可以一次复制一个struct 字段。您也可以一次性完成:

struct rec *r = ...;
struct node *n = ...;
n->record = *r; // Copies the content of "r" into n->record

这样做的好处是每次修改struct rec的结构时不必重新访问复制代码。

【讨论】:

    【解决方案2】:

    由于rec结构只包含基本类型的字段,这样做是完全有效和合理的:

    n->record = *r;
    

    在这种情况下相当于分别复制 key 和 value 字段:

    n->record.key = r->key;
    n->record.value = r->value;
    

    【讨论】:

    • 什么是 PDO 类型?你是说POD?这是 C 而不是 C++。
    • @JensGustedt POD =P 的后缀版本
    • @JensGustedt:是的,这是一个错字^^我已经编辑了我的答案以避免进一步的混乱:)
    • 在 C 的上下文中,您对 C++ 的 POD 的隐式引用仍然没有意义。这里任何结构类型的分配都是有效的操作。
    【解决方案3】:
    n->rec.key = r->key;
    n->rec.value = r->value;
    

    正确但更好的是:

    memcpy(&n->rec, r, sizeof n->rec);
    

    现在您可以使用新字段扩展 struct rec 而无需更改现有代码

    【讨论】:

    • -1,我不明白为什么memcpy会比语言预见的复制操作更好?只需n->rec = *r。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多