Истерические изюминки
Приведение буферов к char *
- это устаревший шаблон кода, который часто можно увидеть. Он использовался так часто, что по-прежнему набирается сегодня, даже после того, как он перестал быть необходимым.
В какой-то момент не было типа void
, поэтому такой API, как read(2)
, объявил бы параметр буфера как char *
, и все вызывающие стороны передали бы свои данные в char *
.
Но read(2)
был void *
долгое время. Прошло так много времени с тех пор, как на сайте для звонков требовался какой-либо актерский состав.
Однако старый код все еще существует, люди все еще читают его, а затем увековечивают шаблон проектирования.
Это не приносит никакого вреда.
Что касается непрерывных данных, то происходит одно из двух. Либо структура данных и тип предназначены для плотного размещения на большинстве или на всех вероятных машинах, либо аналогичный оператор использовался для записи данных в первую очередь, поэтому байты pad не имеют значения, если файл данных не должен быть перемещен между несопоставимыми архитектурами.