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á
x
a nastaví se na 5 - Vytvoří se proměnná
y
a nastaví se na 2 - Proměnná
x
se přetypuje sint
nadouble
- Proměnná
y
se přetypuje sint
nadouble
- Vydělí se
5.0 / 2.0
- Výsledek
2.5
se 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í