Přetypování
Přetypování funguje tak, že máme nějaký datový typ a my o něm řekneme, že je to ve skutečnosti jiný datový typ.
Vezmeme si typickou situaci, kdy chceme vydělit dvě int čísla, ale chceme, aby výsledek bylo číslo desetinné. Aby to bylo možné, tak musí být aspoň jedno číslo při dělení desetinné viz kapitola Aritmetické operace.
Tato situace se dá vyřešit operátorem pretypování (v angličtině cast)
#include <stdio.h>
int main()
{
int x = 5;
int y = 2;
double vysledek = (double) x / (double) y;
return 0;
}
Jak program funguje?
- Vytvoří se proměnná
xa nastaví se na 5 - Vytvoří se proměnná
ya nastaví se na 2 - Proměnná
xse přetypuje sintnadouble - Proměnná
yse přetypuje sintnadouble - Vydělí se
5.0 / 2.0 - Výsledek
2.5se uloží do definované proměnnévysledek - Program se ukončí
Program by fungoval stejně, i kdybychom přetypovali pouze proměnnou x
#include <stdio.h>
int main()
{
int x = 5;
int y = 2;
double vysledek = (double) x / y;
return 0;
}
Nebo pouze proměnnou y
#include <stdio.h>
int main()
{
int x = 5;
int y = 2;
double vysledek = x / (double) y;
return 0;
}
Je potřeba dávat pozor na to, že nelze všechno přetypovat na cokoliv. Kdybychom se poksuli přetypovat číslo na strukturu (viz kapitola Struktury).
#include <stdio.h>
struct struktura { int x; };
int main()
{
struct struktura test = { .x = 10 };
int x = (int) test;
return 0;
}
Tak už se nám to nepodaří.
Obecně přetypování většinou nebudete potřebovat, ale je dobré o něm vědět.
Přetypování na void
Implicitní přetypování
Pokud použijeme operátor přetypování, tak se jedná o explicitní přetypování. Pokud se hodnota přetypuje automaticky bez operátoru, tak se jedná o implicitní přetypování.
Implicitní přetypování nastane například, pokud uložíme hodnotu typuunsigned int do proměné typu int (tyto typy viz kapitola Datový typ číslo).
#include <stdio.h>
int main()
{
unsigned int x = 10;
int y = x;
printf("%i\n", y);
return 0;
}
Odkazy
Následující kapitola: Zkrácené vyhodnocení