程序来源:《深入理解计算机系统第二版》
#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是小端存储方式
761

被折叠的 条评论
为什么被折叠?



