Это называется cast . В C приведение позволяет вам преобразовать или переосмыслить значение из одного типа в другой. Когда вы берете адрес float
, вы получаете float*
; приведение этого к char*
дает вам указатель, ссылающийся на то же место в памяти, но притворяющийся, что то, что живет там, это char
данные, а не float
данные.
sizeof(float)
равно 4
, поэтому при печати четырех байтов, начиная с этого местоположения, вы получите байты, составляющие число с плавающей точкой, в соответствии с форматом IEEE-754 с одинарной точностью . У некоторых байтов установлены старшие биты, поэтому, когда они интерпретируются как signed char
, а затем преобразуются в int
для отображения, они отображаются как отрицательные значения из-за их представления с двумя дополнениями .
Выражение *ptr++
эквивалентно *(ptr++)
, которое сначала увеличивает ptr
, а затем разыменовывает его предыдущее значение; вы можете думать об этом как об одновременном разыменовании и продвижении ptr
.