程序来源:《深入理解计算机系统第二版》
#include <stdio.h>
typedef unsigned char *byte_pointer; /*将byte_pointer定义为指向类型为“unsigned char”的指针变量*/
void show_bytes(byte_pointer start, int len)
{
int i;
for (i = 0; i < len; i++)
{printf(" %.2x ", start[i]); /*利用数组表示法引用指针,整数一次以两个数字的十六进制数输出*/
printf(" %p", &start[i]); /*打印指针变量指向的第i字节的地址*/
}
printf("\n");
}
void main()
{
int val = 0x12345678;
byte_pointer valp = (byte_pointer) &val; /*强制把整形变量转换为byte_pointer*/
show_bytes(valp, 1); /* A. */
show_bytes(valp, 2); /* B. */
show_bytes(valp, 3); /* C. */
show_bytes(valp, 4); /* D. */
show_bytes(valp, 5); /* E. */
}
[~/c/csapp/code/data]#./show-bytes_2.so
78 0x7fff50aca8d4
78 0x7fff50aca8d4 56 0x7fff50aca8d5
78 0x7fff50aca8d4 56 0x7fff50aca8d5 34 0x7fff50aca8d6
78 0x7fff50aca8d4 56 0x7fff50aca8d5 34 0x7fff50aca8d6 12 0x7fff50aca8d7
78 0x7fff50aca8d4 56 0x7fff50aca8d5 34 0x7fff50aca8d6 12 0x7fff50aca8d7 d4 0x7fff50aca8d8
结果显示,低字节位对应低地址位.所以,当前使用的linux是小端存储方式