Как преобразовать void * в float (*)[3] в c ?

#c #casting

#c #Кастинг

Вопрос:

Это фрагмент кода.

 typedef struct Lib3dsMesh {
 //..
 float (*vertices)[3]; 
 //..
}


void* lib3ds_util_realloc_array(void *ptr, int old_size, int new_size, int  element_size) {
    // Do something here.
    return ptr;
}


mesh->vertices = lib3ds_util_realloc_array(mesh->vertices, mesh->nvertices, nvertices, 3 * sizeof(float));
  

Когда я компилирую этот код в Visual c , он возвращает ошибку «Невозможно преобразовать из void * в float(*) [3]».

Я хотел бы знать, как преобразовать void * в float (* вершины) [3];

Комментарии:

1. Приведите его так, как вы применяете что-либо еще. В настоящее время вы не выполняете приведение (явное преобразование), а полагаетесь на неявное преобразование (где его не существует).

Ответ №1:

vertices является указателем на массив из 3 элементов float . Чтобы выполнить приведение из одного типа указателя в другой, обычно используется static_cast :

 void* result = lib3ds_util_realloc_array(
    mesh->vertices, mesh->nvertices, nvertices, 3 * sizeof(float));
mesh-vertices = static_cast<float (*)[3]>(result);