C - 指针算术

Shm*_*opy 1 c pointers

我有:

char buffer[512 + 12];
Run Code Online (Sandbox Code Playgroud)

而且我试图强制buffer将16个字节排列在一起(意思是 - 它是最后4位的零).所以我尝试过:

buffer = (char*)(((uint32_t)buffer +12)) & ~0xF);
Run Code Online (Sandbox Code Playgroud)

但我得到了 incompatible types in assignment

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

Pau*_*l R 6

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

char _buffer[512 + 15];

char * const buffer = (char*)(((uintptr_t)_buffer + 15)) & ~0xF);
Run Code Online (Sandbox Code Playgroud)

请注意,原始缓冲区地址不能被修改,因此我们调用未对齐的缓冲区_bufferbuffer在第一个对齐的地址内初始化一个const对齐的指针_buffer.

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

char buffer[512] __attribute__ ((aligned(16)));
Run Code Online (Sandbox Code Playgroud)

  • 它不是动态分配,它只是一个指针. (3认同)