在尋找循環緩衝區的代碼重用,我遇到一個使用焦炭的這混淆了我爲什麼此代碼使用* char作爲緩衝區指針?
typedef struct CircularBuffer
{
void *buffer; // data buffer
void *buffer_end; // end of data buffer
size_t capacity; // maximum number of items in the buffer
size_t count; // number of items in the buffer
size_t sz; // size of each item in the buffer
void *head; // pointer to head
void *tail; // pointer to tail
} CircularBuffer;
void cb_push_back(CircularBuffer *cb, const void *item)
{
if(cb->count == cb->capacity)
// handle error
memcpy(cb->head, item, cb->sz);
////////////// here's the part I don't understand //////////
cb->head = (char*)cb->head + cb->sz;
//////////////////////////////////////////////////////////
if(cb->head == cb->buffer_end)
cb->head = cb->buffer;
cb->count++;
}
爲什麼施放此空指針爲char?這是一種什麼樣的C語言(我有很強的C語言能力)?一個可以方便地增加指針的方法?
使用的位置指針char型的一些不同的緩衝代碼再度出現,以及:
/**< Circular Buffer Types */
typedef unsigned char INT8U;
typedef INT8U KeyType;
typedef struct
{
INT8U writePointer; /**< write pointer */
INT8U readPointer; /**< read pointer */
INT8U size; /**< size of circular buffer */
KeyType keys[0]; /**< Element of ciruclar buffer */
} CircularBuffer;
再次,這看起來像是某種方便的技巧的是C程序員知道,東西長約指針如果他們是字符,很容易操縱。但我真的只是在猜測。
僅供參考:該類型被稱爲`char *`,而不是`* char`。 – 2011-01-31 01:24:33
這是我第一次看到struct的名字作爲typedef的名字,這很奇怪... – Mandrake 2011-01-31 17:02:33