美文网首页
深入理解计算机系统习题解答

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

作者: 大珠小珠落玉盘听个响 | 来源:发表于2020-10-07 23:27 被阅读0次

第二章

习题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);  //数组中的中括号就是用来访问对应指针指向地址的值

相关文章

网友评论

      本文标题:深入理解计算机系统习题解答

      本文链接:https://www.haomeiwen.com/subject/betcpktx.html