Как я могу скопировать значения в bb [5], используя memcpy, offsetof () и зная адрес базовой структуры?
Следующий фрагмент кода объявляет структуру и массив5 int
с.Затем, используя memcpy
, он копирует int's
в элемент структуры bb
.Я приведу указатель к void*
, чтобы попытаться «обобщить» пример.
int main() {
st_L3 var;
int array[5]; // int_data
void *pnt = &var; // base_address_of_st_L3
// using operator `[]`
memcpy(&((char*)pnt)[offsetof(st_L3, bb)], array, sizeof(int) * 5);
// using pointer arithmetics
memcpy(((char*)pnt) + offsetof(st_L3, bb), array, sizeof(int) * 5);
// one variable at a time
for (int i = 0; i < 5; ++i) {
memcpy(&((char*)pnt)[offsetof(st_L3, bb) + i], &array[i], sizeof(int));
}
}
Обратите внимание, что выполнение арифметики с указателями на void*
указатели недопустимо.Вот почему требуется приведение к char*
.