我正在从计算机系统A程序员的角度研究2.1节,我理解代码在做什么,但我不明白为什么围绕形式参数“byte_pointer”后跟& x有括号?
typedef unsigned char *byte_pointer;
void show_bytes(byte_pointer start, int len) {
int i;
for (i = 0; i < len; i++)
printf(" %.2x", start[i]);
printf("\n");
}
void show_float(float x) {
show_bytes((byte_pointer) &x, sizeof(float));
}
void show_int(int x) {
show_bytes((byte_pointer) &x, sizeof(int));
}
void show_pointer(void *x) {
show_bytes((byte_pointer) &x, sizeof(void *));
}
答案 0 :(得分:5)
您正在对float
的{{1}}指针进行类型转换。然后你将访问每个浮点变量的字节。由于指针算术由它指向的事物的类型决定 - 它的增量或减量将由unsigned char*
或sizeof(unsigned char)
字节指向。您将逐字节访问浮点数。通过投射我们基本上说你需要将其视为1
,即使它是我们传递的unsigned char*
。类型信息发生了变化 - 我们通过提供强制转换使编译器意识到我们已经意识到它。