Если оба типа first
и second
имеют одинаковый тип, тогда вы можете просто сделать second = first;
.Не имеет значения, является ли тип встроенным или определенным пользователем.C скопирует содержимое first
в second
.Просто попробуйте.
В общем случае переменные в C - это просто данные с именем и типом.Если типы 2 переменных a
и b
совпадают, вы можете назначить одну другую: a = b;
.Что происходит, так это то, что значение переменной b
копируется в переменную a
.
Но остерегайтесь указателей: для C указатели - это просто переменные со значением (тот факт, что значение представляет адрес памятине имеет значения, C рассматривает все данные как равные).Если две переменные являются указателями, например char *a; char *b;
, тогда вы можете назначить a = b;
просто с любой переменной.Но поскольку значение переменной b
является адресом памяти, адрес памяти копируется из b
в a
, а не содержимое памяти по адресу памяти.
Если вы хотитескопировав память, вам придется делать это самостоятельно, например, с помощью memcpy()
(см. справочную страницу на нем).
Тем не менее, если ваши структуры содержат указатели, указателиэто содержание, а не то, на что указывают указатели.C будет копировать значения указателя, а не цели указателя.Если у вас есть указатели в ваших структурах и вы хотите какую-то глубокую копию, вам придется самостоятельно выполнять обход своих структур.См. В чем разница между глубокой и мелкой копиями?