type casting

Type casting se refere ao ato de alterar uma variável de um tipo de dado para outro. O compilador irá automaticamente trocar um tipo de dado em outro se fizer sentido. Por exemplo, se você atribuir um valor integer para uma variável ponto flutuante (floating-point), o compilador irá converter o int para float. Casting permite que você faça essa conversão explicitamente, ou forçar quando isso não acontece normalmente.

A conversão em c pode ser classificadas em dois tipos.

Conversão implícita

É também conhecida como ‘conversão do tipo automático‘.

  • Feita pelo compilador, sem intervenção externa do usuário.
  • Geralmente acontece quando uma expressão maior que um tipo de dado está presente. Nessa condição, a conversão de tipo acontece para perder dados.
  • Todos os tipos de dados das variáveis são promovidos para o tipo de da variável com o maior tipo de dado.
Ordem do menor para o maior tipo de dado

É possível a perda de informação em conversões implícitas, sinais podem ser perdidos (quando signed é implicitamente convertido para unsigned), e pode ocorrer overflow (quando long long é implicitamente convertido para float).

Exemplo

// Exemplo de conversão implícita
#include<stdio.h> 
int main() 
{ 
	int x = 10; // inteiro x
	char y = 'a'; // caractere c

	// y é implicitamente convertido para int (ASCII)
	// valor do 'a' é 97
	x = x + y; 
	
	// x é implicitamente convertido para float
	float z = x + 1.0; 

	printf("x = %d, z = %f", x, z); //x = 107, z = 108.000000
	return 0; 
} 

Conversão Explícita

O tipo de conversão realizado pelo programador posicionando o tipo de dado da expressão de tipo especifico é conhecido como conversão do tipo explícito. A sintaxe é:

(tipo_de_dado)expressão

Exemplo:

float f;
int a = 20, b = 3;
f = a/b;

O resultado de f será 6.000000 ao invés de 6.6666666 porque a operação entre dois inteiros resulta num valor inteiro. Se escrevermos f = (float)a/b o resultado será 6.6666666.

O type casting funciona da seguinte forma: primeiro, ele converte a variável ‘a’ do tipo int para o tipo float temporariamente. E como o resultado da operação entre um float e um int é do tipo float, a resposta fica 6.666666 ao invés de 6.000000.

O operador cast somente se aplica a variável ‘a’, não a b nem a/b.

Um outro ponto importante é que o tipo da variável ‘a’ é float somente na execução do comando. Depois disso, ‘a’ será tratado como int.

Nota: Em f = (float)(a/b), primeiro a expressão a/b será feita, para então converter o resultado e float. Nesse caso o resultado seria 6.00.

No libft

Type casting será muito usado devido muitas funções receberem um parâmetro do tipo const char sendo que o retorno deverá ser apenas um char.

Referências

https://www.geeksforgeeks.org/type-conversion-c/

https://developerinsider.co/type-casting-c-programming/

Explicit Type Conversion in C

Deixe um comentário