ну, конечно, это печатает "странные" вещи. Вы проходите через int
с, но сообщаете printf
, что вы прошли через float
с. Поскольку эти два типа данных имеют разные и несовместимые внутренние представления, вы получите «бред».
Не существует «автоматического приведения», когда вы передаете переменные в переменную функцию, например printf
, значения передаются в функцию как тип данных, которым они на самом деле являются (или в некоторых случаях обновляются до более совместимого типа). 1007 *
То, что вы сделали, похоже на это:
union {
int n;
float f;
} x;
x.n = 10;
printf("%f\n", x.f); /* pass in the binary representation for 10,
but treat that same bit pattern as a float,
even though they are incompatible */