Разыменование пустых указателей

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

#define CB_TYPE_CHAR     0
#define CB_TYPE_FLOAT    1

...

typedef struct CBUFF
{
    uint16 total;       /* Total number of array elements */
    uint16 size;        /* Size of each array element */
    uint16 type;        /* Array element type */
    uint16 used;        /* Number of array elements in use */
    uint16 start;       /* Array index of first unread element */
    void *elements;     /* Pointer to array of elements */
} CBUFF;

...

void cbRead(CBUFF *buffer, void *element)
{
    if (buffer->type == CB_TYPE_CHAR)
    {
    /* The RHS of this statement is the problem */
        *(char*)element = *(buffer->elements[buffer->start]);
    }

    /* Other cases will go here */

    buffer->start = (buffer->start + 1) % buffer->total;

    --buffer->used;
}

Я понимаю, что LHS должен быть приведен к char, чтобы я мог разыменовать указатель void. Я также понимаю, что этот фрагмент кода:

buffer->elements[buffer->start]

дает адресbuffer->Начните' элемент массива элементов, который я также хочу разыменовать, чтобы получить к содержимому этого адреса. Или хотя бычто я беру у K &Р.

Учитывая все это, как мне сказать компилятору, что содержимое памяти по этому адресу является символом, и что можно разыменовать его? Здесь что-то происходит, я просто неТ понять.

Ответы на вопрос(2)

Ваш ответ на вопрос