#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);