void function(void * array, size_t itemsInArray, size_t sizeOfEachItem, int(*compare)(const void*, const void*))
char * array_ptr = static_cast<char*>(array);
char * ptr1 = items_ptr;
char * ptr2 = items_ptr + 1;
void * array_ptr_void1 = static_cast<void*>(ptr1);
void * array_ptr_void2 = static_cast<void*>(ptr2);
compare(array_ptr_void1, array_ptr_void2);
Таким образом, код, который у меня есть, в основном является тем, что я пытаюсь выполнить, но я, очевидно, не понимаю указатели void и передаю их функции сравнения. То, что я в основном хочу сделать, - это взять указатель void на массив, передав его указателю на char, чтобы я мог увеличивать его. Затем я хочу передать определенные части функции сравнения. Мне просто нужно, чтобы кто-то объяснил мне логику того, что я пытаюсь сделать, потому что я, похоже, не понимаю передачи указателей void на функцию сравнения. Я не могу изменить прототип функции. Мой вопрос не в том, чтобы увеличивать указатель на char, я понимаю эту часть, и я просто использую item_ptr и item_ptr + 1, чтобы продемонстрировать передачу определенной части массива. Последняя строка кода ломается, когда я посылаю части, которые нужно сравнить, поэтому мне нужно понять недостаток в моей логике. Благодаря!static_cast и передача указателей void C++
Вы имеете дело с устаревшими интерфейсами C? –
Тогда вам, вероятно, не нужны указатели void (а также необработанные массивы и необработанные указатели). Если вы пытаетесь реализовать что-то похожее на общую функцию сортировки, попробуйте смоделировать ее после 'std :: sort'. –
Я не могу изменить прототип функции, поэтому мне нужно выяснить, как обращаться с данными, когда я их получаю. – user3466258