Если я следующее: -Переходя на структуру к функции в C
struct foo
{
int a;
int *b;
} bar;
void baz(struct foo qux)
{
}
Правильно ли я думать, что переход bar
к baz()
результатов в локальной копии bar
быть в стек? Если да, то какая копия? в C++ я предполагаю, что он будет вызывать конструктор копирования или конструктор копии по умолчанию, но я действительно не знаю, как это будет работать в C.
Имеет ли C понятие конструктора копии по умолчанию и имеет ли он имя? Можно ли что-то сделать, чтобы выполнить глубокую копию? (Гипотетически). Единственный способ, о котором я мог думать, - это сделать глубокую копию, а затем передать ее функции.
Как правило, я бы передавал указатель на foo
, но мне просто интересно, как он работает. Кроме того, у меня создается впечатление, что передача указателя происходит быстрее, экономит память и является рекомендуемым курсом действий при выполнении такого рода операций. Я бы предположил, что это мелкая копия; можно ли это изменить?
p.s. в C нет никаких конструкторов; только в C++. В C ваша структура данных просто будет скопирована byte-for-byte. –
@EdwardFalk: конечно, в фактах я говорил о * инициализации *, а не о конструкции; Кроме того, стандарт «byte for for byte» не указан стандартом, который фактически говорит, что гарантируется копирование только названных полей («Элементы-члены« Без названия »имеют неопределенное значение даже после инициализации.), C99 §6.7 .8 ¶9) - то есть заполнение может копироваться или не копироваться. –
Отличное объяснение, я предполагаю, что вы не можете переопределить поведение по умолчанию для выполнения глубокой копии, если это необходимо? – chrisw