一、大端存储方式和小端存储方式
- 大端存储格式。大端存储格式,即字数据的高字节存储在低地址中,而字数据的低字节存放在高地址中。小端存储格式相反。
- 小端方式和大端方式的区别是字中的字节的存储顺序不同,而字与字之间的存储顺序是相同的。
- 我们常用的x86结构是小端模式,而sun的SPARC采用大端模式。
二、printf函数
- 入栈:printf函数是最右侧的元素先入栈。若入栈元素位char、short等小于4个字节的类型,入栈时也占4个字节,所以"printf("%d, %d, %d", a, b, c);"才不会发生输出错误;大于4个字节的时候,如long long,按实际字节数入栈;字符串参数入栈的是指向字符串的指针。注意:char、short等类型入栈时由于入栈字节数为4,比它们实际占用的内存数要多,那么高位时补0还是补1呢?对于无符号类型时(如unsigned short),高位总是补1;有符号类型时(如short),高位补符号位。
- 出栈(即输出):输出时,从栈顶开始输出,每次输出4个字节。
测试题目:
int main(){
char array[12] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
short *pshort = (short *)array;
int *pint = (int *)array;
long long *pint64 = (long long *)array;
printf("0x%x, 0x%x, 0x%x, 0x%x", *pshort, *(pshort+2), *pint64, *(pint+2));
return 0;
}
输出结果: