2013-10-25 2 views
0

Это является продолжением этого вопроса: Having a function change the value a pointer represents in CC изменить значение пустой указатель представляет

В качестве упражнения я пытаюсь сделать обобщенную функцию, которая изменяет значение в массиве неустановленного типа. Думаю, это должно выглядеть так.

void set_value(void * data, void * value, size_t size, int index){ 
    void * position = data + index*size; 
    *position = *value; 
} 

Конечно, это не компилируется, * положение = * значение не использовать информацию о размере стоимости (здесь было предположить, как данные, так и точки значения для smthg из size_t размера).

То, что я пытаюсь сказать моей программы: «взять кусок памяти размером, на который указывает значение и скопировать его по адресу, на который указывает положение»

ответ

5

Использование memcpy().

void set_value(void * data, void * value, size_t size, int index){ 
    void * position = (char*)data + index*size; 
    memcpy(position, value, size); 
} 

Обратите также внимание, что арифметика на указателях недействительна C, хотя она может быть разрешена как расширение компилятора. Сначала вы должны набрать char*.

+0

О, я боролся с учебниками по указателям и искал в форумах и ответил, что это такое. Спасибо. – Vince

+0

Кроме того, не забывайте, что арифметика указателей на указателях void не является строго верной. – tangrs

+0

На самом деле, я понятия не имею об этом. каков был бы правильный способ получить позицию указателя в нужном месте? – Vince

 Смежные вопросы

  • Нет связанных вопросов^_^