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