Почему скобки вокруг параметра функции?
Я изучаю раздел 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 ответ
Вы печатаете float
указатель на unsigned char*
, И тогда вы получите доступ к каждому из байтов переменной с плавающей точкой. Поскольку арифметика указателя диктуется типом объекта, на который он указывает - приращение или уменьшение на него будет направлено sizeof(unsigned char)
или же 1
байт. Вы получите доступ к байту с плавающей точкой. Кастингом мы в основном говорим, что вы должны рассматривать это как unsigned char*
даже если это float*
что мы проходим Изменения в информации о типах - и мы информируем компилятор, что мы знаем об этом, предоставляя приведение.