3

これらの構造がある場合:

struct rec {
 int key;
 double value;
};

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

item のフィールドの値を item にコピーする必要が struct rec *rありstruct node *n

私はこれを行うことができますか?

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

3 に答える 3

5

はい、一度にstruct1 つのフィールドのコピーを作成できます。ワンショットでそれを行うこともできます:

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

このようにすると、 の構造を変更するたびにコピー コードを再確認する必要がないという利点がありますstruct rec

于 2013-09-04T16:11:56.813 に答える
2

構造体には基本型のフィールドのみが含まれているため、次のrecようにすることは完全に有効で合理的です。

n->record = *r;

keyこの場合、これはとvalueフィールドを別々にコピーすることと同じです:

n->record.key = r->key;
n->record.value = r->value;
于 2013-09-04T16:13:33.303 に答える
-1
n->rec.key = r->key;
n->rec.value = r->value;

正しいですが、より良いのは次のとおりです。

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

既存のコードを変更せずに、新しいフィールドで struct rec を拡張できるようになりました

于 2013-09-04T16:17:54.480 に答える