2015-03-14 4 views
2

Так что я программирую круговую очередь в C для школьного проекта, и у меня есть следующая проблема.Урок глубокой копии в C

В некоторых методах я работаю с указателями, и мне нужно их скопировать. Чтобы работа очереди со всеми типами данных работала с определенным типом element_t. Это можно объявить в main.c, который вызывает мою очередь.

Дело в том, что эта функция копирования должна быть реализована в том же main.c. Поскольку это школа проект, который мы получили заголовки уже, так что метод, который делает копию выглядит следующим образом:

void element_copy(element_t *dest_element, element_t src_element) 
{} 

Я не могу показаться, чтобы найти правильный код для этого метода, хотя я думаю, что я» m отсутствует что-то тривиальное.

*dest_element = src_element 

кажется просто скопировать значение элемента Src вместо его pointee.

любая помощь по этому вопросу?

+1

'* dest_element = src_element' в порядке, но, очевидно, это само указывает, что для этого вам не нужна функция. –

+0

@iharob Разве это не правильный синтаксис для назначения указателя => '* dest_element = & src_element;'? – kkaosninja

+0

Мне нужна функция, потому что назначение требует от нас копирования в другом файле, чем там, где это необходимо. – Wouter

ответ

0

Если я правильно понял, да это все, что вам нужно

void element_copy(element_t *dest_element, element_t src_element) 
{ 
    /* prevent undefined behavior */ 
    if (dest_element == NULL) 
     return; 
    *dest_element = src_element; 
} 

, если вы хотите, вы можете включить string.h, а затем

void element_copy(element_t *dest_element, element_t src_element) 
{ 
    /* prevent undefined behavior */ 
    if (dest_element == NULL) 
     return; 
    memcpy(dest_element, &src_element, sizeof(src_element)); 
} 

, но ни один из выше смысла макияжа, Becase обычай образца будет

element_t x; 
element_t y; 

memset(&x, 0, sizeof(x)); 
element_copy(&y, x); 

который точно такой же, как

element_t x; 
element_t y; 

memset(&x, 0, sizeof(x)); 
y = x; 
+0

Я думаю, что я нашел проблему, это было в тестовом коде, который нам дали, он не разыменовал указатели, которые он отправил, поэтому я только видел адреса. – Wouter

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