我在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的意义是什么,这有助于对齐吗?
答案 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
没有对齐要求。