将PVOID缓冲区转换为PCHAR的意义何在?

时间:2014-07-10 08:53:41

标签: c++ c memory-alignment

我在MS代码示例中看到了下一个代码:

PVOID alignedBuffer[BUFFER_SIZE/sizeof( PVOID )];
PCHAR buffer = (PCHAR) alignedBuffer;

hResult = FilterSendMessage( context->Port,
                                 &commandMessage,
                                 sizeof( COMMAND_MESSAGE ),
                                 buffer,
                                 sizeof(alignedBuffer),
                                 &bytesReturned );

(alignedBuffer将保存作为重放传递给FilterSendMessage调用的结构数组) 将PVOID转换为PCHAR的意义是什么,这有助于对齐吗?

1 个答案:

答案 0 :(得分:5)

您没有将PVOID转换为PCHAR。您正在将PVOID s(衰减到PVOID *)的数组转换为PCHAR

PVOID alignedBuffer[BUFFER_SIZE/sizeof( PVOID )];

这将alignedBuffer定义为PVOID s(或void * s)的数组。作为指针数组,它将被适当地对齐(通常在32位上为4字节,在64位上为8字节)。如果你只是

CHAR buffer[BUFFER_SIZE];

没有类似的保证,因为CHAR没有对齐要求。