Это простой указатель математики.
адрес с плавающей запятой увеличивается, по крайней мере, на sizeof (float) (это должно быть 4, но у вас есть приращение 16, это зависит от аппаратного обеспечения и реального размера, используемого для хранения поплавков), в то время как адрес char увеличивается на sizeof (char) (1)
у вас есть y + 16 = z + 1, что неудивительно, если вспомнить, что «следующий float» («вещи», на которые теперь указывает y) не действительно float, а место в памяти после float и т. Д. это для z (это будет указывать не на символ);
это просто означает, что местоположение с плавающей точкой находится в 15 байтах "перед" положением символа. То есть y + 15 = z.
РЕДАКТИРОВАТЬ : с y я всегда имею в виду адрес с плавающей запятой, взятый с &, и так для z ...: т.е. до того, как вы их включили. y + 16 - увеличенное значение y (после того, как вы сделали y ++), а z + 1 - увеличенное значение z после z ++.
РЕДАКТИРОВАТЬ 2: тупой, я не заметил, что вы увеличиваете y в 4 раза! поэтому sizeof (float) равен 4, 4 * 4 = 16 ...! и это 4 на вашем компьютере тоже (как и ожидалось IEEE для чисел fp одинарной точности ...), и это означает, что y + (sizeof (float) * 4 = z + sizeof (char) ... это все еще означает y расположение 15 байтов перед z (адрес символа)