我早已记不清在C语言中类似这样的事情做了多少次:
struct foo f;
struct foo* pf = &f;
char* pc = (char*) pf;
transmit(pc, sizeof(f));
或许应该这样理解:
char* buffer[1024];
receive(buffer, 1024);
float values[256];
for(int ii = 0; ii < 256; ii++) {
float* pf = (float*)(buffer + ii*4);
values[ii] = *pf;
}
也许是这样:
uint32_t ipAddress = ...;
uint8_t* p = (uint8_t*)&ipAddress;
uint8_t octets[4] = {p[0], p[1], p[2], p[3]};
printf("%d.%d.%d.%d\n", octets[0], octets[1], octets[2], octets[3]);
我刚刚发现通过将内存重新解释为另一种指针类型来重新解释一块内存会引发未定义的行为。然而,上述所有示例的目的都是绝对必要的。那么正确的做法是什么呢?
union
关键字吗? - Christoph