Por que printf imprime o valor aleatório com o especificador de formato float e inteiro

Eu escrevi um código simples em uma máquina de 64 bits

int main() {
    printf("%d", 2.443);
}

Então, é assim que o compilador se comportará. Ele irá identificar o segundo argumento para ser um duplo, portanto, ele vai empurrar 8 bytes na pilha ou, possivelmente, apenas usar registradores em chamadas para acessar as variáveis.%d espera um valor inteiro de 4 bytes, portanto, imprime algum valor de lixo.

O interessante é que o valor impresso muda toda vez que eu executo este programa. Então, o que está acontecendo? Eu esperava que ele imprimisse o mesmo valor de lixo toda vez que não fosse sempre diferente.

questionAnswers(2)

yourAnswerToTheQuestion