每天多学一点点

大端序(bit-endian),小端序(little-endian)

计算机领域中字节数据在计算机内存中存放的顺序,有大端序,小端序
小端序:数据的高位字节存放在地址的高端 低位字节存放在地址低端
eg:int 0x12345678

地址        数据        
0x30      78     
0x31      56        
0x32      34      
0x33      12   

大端序:数据的高位字节存放在地址的低端 低位字节存放在地址高端
eg:int 0x12345678

地址        数据        
0x30      12     
0x31      34        
0x32      56      
0x33      78     

使用的大端序还是小端序与硬件层面有关,如常见的Intel x86就是小端序,与编程语言是没有关系的。而且单字节数据一般来说储存顺序是无所谓的,字符类型char 就会从低端往高端储存:

  • ‘abc’ -> 97 98 99 00(字符串结尾)

但是int,short,long之类的类型就要考虑储存的顺序。

栈(stack)


这个栈不是自己建立的栈(线性表),是程序运行时,暂时存储参数的结构。

栈的特性

1.先进后出,后进先出
2.从高地址向低地址延伸

栈的用处

1.暂时保存变量
2.调用函数是传递参数
3.保存函数返回地址

###swap()函数中的栈使用情况分析
C语言代码:

include<stdio.h>  
void swap(int *a,int *b)  
{
    int c=*a;
    *a=*b;
    *b=c;
}
void main()
{
    int a=0,b=1;
    swap(&a,&b);
    printf("%d %d",a,b);
}
分析:

一开始将a=0,b=1压入栈。

运行到swap()

经过c=a;a=b;b=c;的操作以后,地址交换。

所以a,b指向的值也交换了。