A transmissão em C é única, diferente de outras línguas. Também nunca é inteligente.
A conversão em C converte valores de um tipo para outro usando regras cuidadosamente definidas. Se você realmente precisa saber, leia o padrão. Caso contrário, os pontos principais são:
- A conversão entre tipos inteiros preserva o valor, se possível. Se o destino tiver mais bits, isso será ampliado e geralmente seguro, mas poderá envolver extensão de sinal. Se mais estreito, os bits serão perdidos.
- A conversão entre tipos de ponteiro preserva o valor do ponteiro, mas os resultados geralmente são indefinidos, geralmente não portáteis e úteis para cenários avançados.
- A conversão entre tipos inteiros e ponteiros será aceitável se o número inteiro for grande o suficiente e preservar o padrão de bits (o que quer que isso aconteça). Se o número inteiro for muito pequeno, o resultado será indefinido, mas não será útil. Como regra, 'long' é largo o suficiente para 'void *', mas não há garantias! Os ponteiros criados dessa maneira podem ser inválidos, de todas as formas interessantes.
- Conversão entre tipos float e número inteiro são conversões aritméticas, conforme definido por uma rotina de biblioteca apropriada (com truncamento, não arredondamento).
- Você pode converter o valor de retorno de uma função para anular. Eu nunca tenho. Não faz nada.
Algumas conversões são aplicadas implicitamente e, em outras, o compilador emitirá um aviso. Melhor prestar atenção aos avisos!
A definição de dicionário para o elenco é melhor ignorada, pois é inútil. Muitos elencos são melhor descritos pelos termos conversão ou coerção, portanto vale a pena conhecê-los também.
C ++ é MUITO mais complicado, mas você não perguntou isso, perguntou?