深入理解计算机系统习题解答

第二章

习题2.5
#include <stdio.h>
typedef unsigned char *byte_pointer;
void show_bytes(byte_pointer start, int len)
{
    int i;
    for (int i = 0; i < len; i++) {
        printf("%.2x", start[i]);   // 这个地方有疑问,这个到底代表啥?
    }
    printf("\n");
}

int main()
{
    int val = 0x87654321;
    byte_pointer valp = (byte_pointer)&val;
    // printf("%.2x", valp[0]);    // 这个位置的输出和下面的输出有啥不同?
    // printf("%.2x", valp);
    show_bytes(valp, 1);
    show_bytes(valp, 2);
    return 1;
} 

关于start[i]的疑问的解答,因为第一次看到这种用法,经常见到的用法是使用start[i]去访问数组对应索引的值。这里就可以把start作为一个数组的首地址来看待,该数组是单字节元素组成的数组,对应的首地址刚好是val的地址。可以用下面这种方式来表示。

start = &val;
start[1] = *((byte_pointer)&val + 1);  //数组中的中括号就是用来访问对应指针指向地址的值
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容