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);