C - 指针算术

时间:2013-08-25 08:15:58

标签: c pointers

我有:

char buffer[512 + 12];

我正试图强制buffer为16字节对齐(意思是 - 将其归零为最后4位)。 所以我试过了:

buffer = (char*)(((uint32_t)buffer +12)) & ~0xF);

但我得到了incompatible types in assignment

我猜这是因为char []和char *不是同一类型。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:6)

你需要添加15个字节,而不是12个,它应该是:

char _buffer[512 + 15];

char * const buffer = (char*)(((uintptr_t)_buffer + 15)) & ~0xF);

请注意,原始缓冲区地址无法修改,因此我们调用未对齐缓冲区_buffer并在buffer内的第一个对齐地址处初始化常量对齐指针_buffer。 / p>

以可移植性为代价,您还可以使用编译器扩展来更简单地执行相同的操作,例如在gcc和gcc兼容的编译器中:

char buffer[512] __attribute__ ((aligned(16)));