Нет. Так как вы не знаете тип, на который указывает пустота *, то глубокая копия не может быть и речи.
Кроме того, вы не могли даже выполнить глубокую копию a
, так как это может указывать на один из int
из массива из них.
Как правило, в C вы должны иметь структуру, которая несет типы данных своего содержимого, если вы хотите иметь возможность делать глубокие копии. Например:
struct teststruct {
int a_sz;
enum voidType vt;
int *a;
void *data;
};
Тогда вы могли бы использовать a_sz
, чтобы выяснить, сколько целых чисел в памяти, на которую указывает a
состоит из и перечисляемого типа data
, хотя технически это также может быть массив, так что вы, возможно, потребуется d_sz
также.
Еще одна уловка, чтобы иметь data
точку в структуре, которая носит его собственный тип данных, встроенный в него, такие как:
typedef struct {
enum voidType vt;
union {
int i;
float f;
double d;
}
} tVoidType;
Как вы можете сделать глубокую копию? Неизвестно, является ли структура однородной. Неизвестно, является ли он связанным списком ... – avp
Я был в характере вопроса. «Возможно ли сделать глубокую копию структуры, которая содержит указатель на пустоту?» - Да, это возможно. Можно ли рассказать, сколько данных отсутствует без дополнительного поля - нет, это невозможно, по крайней мере, если это не какие-то специальные данные, такие как null char terminated char * или что-то еще. – doc