O char
, apesar do nome, é um tipo numérico (que até poderia se chamar byte, pois no fundo é isso que ele é).
O que acontece é que esse número pode ser interpretado como um caractere, usando o seu respectivo valor na tabela ASCII.
Por isso, eu posso usar tanto o caractere quanto o seu respectivo valor numérico, que ambos funcionam. O que muda é na hora de imprimir, pois de acordo com o especificador de formato usado (%d
ou %c
), o valor impresso será "convertido" para o tipo indicado.
Ou seja, isso:
char c = 'A';
printf("%d\n", c); // 65
printf("%c\n", c); // A
Dá o mesmo resultado que isso:
char c = 65;
printf("%d\n", c); // 65
printf("%c\n", c); // A
Tanto que no seu caso, nem sequer precisaria do x
, você pode usar o próprio valor numérico do y
que também funciona:
int y = 65;
printf("O numero inteiro: %d \n O caractere: %c \n\n", y, y);
Isso imprime:
O numero inteiro: 65
O caractere: A
Mais um caso de
Não é de todo culpa das pessoas aprenderem errado a programar, tá cheio de exemplo ruim.
As pessoas precisam ser mais questionadoras sobre o que encontram na internet. Ainda bem que existem Stack Overflow, Reddit, Quora, e o Tabnews para as pessoas entenderem melhor alguma coisa. Sempre torcendo para ter alguém que saiba como realmente funciona para explicar o correto, como aconteceu aqui.
Só lembrando que um int
poderia ter números além da tabela ASCII, e isso poderia ser um problema, dá certo quando se sabe que ele está dentro da faixa de valor que pode ser impresso adequadamente.
Também lembrando que o que você vê na tela não são números, são representações textuais do número. Da mesma forma que não existem números decimais e binários, só existem números. O que dá para fazer é ter uma representação textual em notação decimal ou binária. O printf()
só faz a representação textual aparecer, de acordo com o formatador escolhido. E o %c
é a representação do número usando a tabela ASCII.