笔者最近再看深入理解计算机系统,在看到书31(中文版)不禁对下面的程序起了疑惑
typedef unsigned char *byte_pointer;
void show_byte(byte_pointer start, size_t len) {
for (size_t i = 0; i < len; i++)
printf("%.2x", start[i]);
printf("\n");
}
为什么byte_pointer是unsigned char*类型呢?而不是int *或者char *。话不多说,立马开始了实验
实验代码:
void show_int(int x) {
show_byte(byte_pointer(&x), sizeof(int));
}
int main()
{
unsigned int test = 12345;
unsigned int test2 = 54321;
show_int(test);
show_int(test2);
return 0;
}
当把byte_pointer改为int *时,程序结果为
为什么回事这个呢?
通过debug,发现 printf("%.2x", start[i]); start[i]被解释为了int。所以,程序每次读取4个字节(int 的大小),并以16进制输出。