为什么围绕函数参数括号?

时间:2018-01-16 08:27:58

标签: c function parameters

我正在从计算机系统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 *));
}

1 个答案:

答案 0 :(得分:5)

您正在对float的{​​{1}}指针进行类型转换。然后你将访问每个浮点变量的字节。由于指针算术由它指向的事物的类型决定 - 它的增量或减量将由unsigned char*sizeof(unsigned char)字节指向。您将逐字节访问浮点数。通过投射我们基本上说你需要将其视为1,即使它是我们传递的unsigned char*。类型信息发生了变化 - 我们通过提供强制转换使编译器意识到我们已经意识到它。