C语言指针的一个问题 感觉离答案很近了可就是差一点点

img

书上的一个例题,上机运行了书上结果没问题。
就第一个输出结果来说,我判断是第一个字节和第二个字节里的二进制码拼接,然后十进制输出,字符1二进制0011 0001
字符2二进制0011 0010,在线转换出来的结果和实际输出结果相差255,为什么啊到底
img

对于"12345"里的"12"来说,1是数据高位,2是数据低位,所以1被保存在内存的高地址中,2被保存在内存的低地址中,即从左到右,是"21",再把它们对应的ASC码“50” "49"转为二进制就是“0011 0010 0011 0001”,再整体转为十进制就是12849

下面这个程序会输出你预料的结果:

#include <stdio.h>
int main(void)
{
    char a[5]="21435";
    short* p;
    p=(short *)a;
    printf("%d\n",*p);
    p++;
    printf("%d\n",*p);
    return 0; 
}

至于书上那个,"12345"实际上是被当成理论上的"21435"去算了
理由是我们的计算机通常采用小端(存储)模式:
即:小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。