2013-09-04 2 views
3

Если я эти структуры:C- структура в структуре

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; 
+0

Непосредственный ответ нет, но только потому, что ваш член называется 'record', не' rec'. Используя правильные имена членов, * да *, вы можете сделать это, но есть лучшие способы (см. Ниже). – WhozCraig

+0

Вы правы, теперь я исправлю текст! – SegFault

ответ

5

Да, вы можете сделать копию 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; 
+1

Что такое тип PDO? Вы имеете в виду POD? Это C, а не C++. –

+0

@JensGustedt Постфиксная версия POD = P – WhozCraig

+0

@JensGustedt: Да, это была опечатка ^^ Я отредактировал свой ответ, чтобы избежать дальнейшего путаницы, хотя :) – LihO

-1
n->rec.key = r->key; 
n->rec.value = r->value; 

Правильно, но лучше:

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

Теперь Вы можете расширить STRUCT ЗАП с новыми полями без изменения существующего кода

+3

-1, я не понимаю, почему 'memcpy' будет лучше, чем операция копирования, которая предусмотрена языком? Просто сделайте 'n-> rec = * r'. –

Смежные вопросы