C-结构中的结构

C-结构中的结构,c,structure,C,Structure,如果我有这些结构: 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; n->record.key = r->key;

如果我有这些结构:

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;
n->record.key = r->key;
n->record.value = r->value;

是的,您可以一次复制一个
struct
字段。您也可以在一次拍摄中完成:

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

这样做的好处是,每次修改
struct rec

的结构时都不必重新访问复制代码,因为
rec
结构只包含基本类型的字段,所以执行以下操作是完全有效和合理的:

n->record = *r;
在这种情况下,这相当于分别复制
字段:

是正确的,但更好的是:

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

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

直接回答是否,但这只是因为您的成员被称为
record
,而不是
rec
。使用正确的成员名称,是的,你可以做到这一点,但有更好的方法(见下文)。你是对的,现在我已经更正了文本!什么是PDO类型?你是说豆荚?这是C而不是C++。@ JensGustedt的POD =后缀版本P@JensGustedt:耶,那是一个打字错误^^我编辑了我的答案以避免进一步的混淆:)但是你对C++的POD的隐式引用在C的上下文中仍然没有意义。在这里,任何结构类型的赋值都是有效的操作。-1,我不明白为什么
memcpy
会比该语言所预见的复制操作更好?只要做
n->rec=*r
memcpy(&n->rec, r, sizeof n->rec);