Bil*_*dor 2 c pointers endianness
我遇到了以下问题:
int i[20] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19};
int *p;
Run Code Online (Sandbox Code Playgroud)
i [0]从具有32位整数的Big Endian机器上的地址1,242开始.
在以下陈述之后,p等于什么?
p = &i[2] + 4;
i[0] = *(p + 5) - 8;
Run Code Online (Sandbox Code Playgroud)
结果:
p = 1242 + 4 * (2 + 4) = 1,266
i[0] = i[(6 + 5)] – 8 = 3
Run Code Online (Sandbox Code Playgroud)
如果这是在小E机器上,我的解决方案会改变吗?
在以下陈述之后,p等于什么?
p将具有相同的价值.你只是给它分配了一些地址 - 例如这里:p = &i[2] + 4,这与字节序无关.
如果你在同一台机器上运行这整个代码,那么i[0]改变的价值也不会; 因为你在"整数"整数上操作,而不是使用char指针读取4字节整数的第1个字节.
例如,如果你有
int x = 1;
unsigned char * y = (unsigned char*) &x;
Run Code Online (Sandbox Code Playgroud)
然后*y在小端机器上等于1,在大端机器上等于0.
如果客户端将此数组发送到另一台机器,那么还有一点不同的故事,然后它取决于客户端如何序列化(例如哪个字节序)以及服务器如何解释它.然后,endianess问题可能会发挥作用(例如,因为客户端和服务器可能具有不同的字节顺序).
这里有更多阅读,让您了解这个概念.