一、什么是大端和小端
小端就是低地址端存放数据的低位,高地址端存放数据的高位
大端就是高地址端存放数据的低位,低地址端存放数据的高位
例:0x12345678
小端模式:低地址--------------------------------à高地址
0x78 | 56 | 34 | 12
大端模式:低地址--------------------------------à高地址
0x12 | 34 | 56 | 78
二、为什么会有大端和小端
因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于 8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。例如一个16bit的short型x,在内存中的地址为0x0010,x的值为0x1122,那么0x11为高字节,0x22为低字节。对于大端模式,就将0x11放在低地址中,即0x0010中,0x22放在高地址中,即0x0011中。而小端模式,就将0x22放在低地址0x10中,将0x11放在高地址0x11中。
三、数组在大端和小端模式的储存
例:以0x34567819为例
大端: 小端:
高地址 高地址
arr[3] 0x19 低位 arr[3] 0x34 低位
arr[2] 0x78 arr[2] 0x56
arr[1] 0x56 arr[1] 0x78
arr[0] 0x34 高位 arr[0] 0x19 高位
低地址 低地址
四、实际案例
例:int arr[10] = {1,2,3};
int *p = arrc;
*p = 10;
P++;
假设这里p加一个字节,若p指向arr首元素地址100,p++则指向的地址为101,这里是小端模式。