我在 C 中有这个程序:
int main(int argc, char *argv[])
{
int i=300;
char *ptr = &i;
*++ptr=2;
printf("%d",i);
return 0;
}
小端的输出是 556。
我试图理解输出。这是我的解释。
问题是答案在大端机器中是否保持不变?
我 = 300; => i = 100101100 //以二进制字格式 => BB Hb 0001 00101100 其中 B = 字节,Hb = 半字节
(A)=> 在内存中(假设它是小端))
0x12345678 - 1100 - 0010 ( Is this correct for little endian)
0x12345679 - 0001 - 0000
0x1234567a - 0000 - 0000
0x1234567b - 0000 - 0000
0x1234567c - 下一个 intezer 的位置(ptr++ 或 ptr + 1 的位置,其中 ptr 是一个 intezer 指针,因为 ptr 是 int 类型 => 在执行 ++ptr 时它将增加 4 个字节(int 的大小))
什么时候
(B)我们做 char *ptr = &i; ptr 将变为 char => 在执行 ++ptr 时它将增加 1 个字节(char 的大小),因此在执行 ++ptr 时它将跳转到位置 -> 0x12345679(具有 0001 - 0000)现在我们正在执行 + +ptr = 2 => 0x12345679 将被 2 覆盖 => 0x12345679 将具有 00 *10** - 0000 而不是 000* 1 * - 0000
所以新的内存内容将如下所示:
(C)
0x12345678 - 1100 - 0010
0x12345679 - 0010 - 0000
0x1234567a - 0000 - 0000
0x1234567b - 0000 - 0000
相当于 => BB Hb 0010 00101100 其中 B = 字节和 Hb = 半字节
我的推理是否正确?还有其他简短的方法吗?Rgds,软软的