Každá funkcia má svoj návratový typ, hodnotu tohto typu potom vracia. Napr.
Kód:
int scitaj(int a, int b);
vracia premennú typu int.
Formát a typ sú hlavne v jazyku C dve rozdielne veci. To, že je premenná typu char totižto neznamená, že v nej nutne musí byť znak, môže v nej byť aj ľubovoľné číslo od -128 do 127. Potom túto premennú môžeš pri výpise formátovať ako znak (%c) alebo ako číslo (%d). (Preto sa aj pretypovanie volá pretypovanie a nie preformátovanie).
Kód:
(char*) int i;
je neplatný zápis, kľúčové slovo int tam nemá čo robiť.
A chápeš to zle. Premennú, hodnotu, ani nič nemeníš na smerník. Existuje dátový typ smerník, ktorý slúži na uloženie pamäťovej adresy. Tento dátový typ ďalej máva určené aký typ premennej by sa mal nachádzať na pamäťovej adrese na ktorú ukazuje. Pamäťový typ smerník na char má zápis
Kód:
char* c
V premennej c je uložená pamäťová adresa. Pamäťová adresa je číslo, v 32-bitových programoch 32-bitové, v 64-bitových programoch 64-bitové (Poväčšine). Aj keď urobíš smerník napr. na float štýlom
Kód:
float* f
f bude dátový typ smerník, čiže celé číslo, pamäťová adresa. Ak chceš vypísať adresu, na ktorú f ukazuje, použiješ výpis
Kód:
printf("%x",f);
Používam %x, pretože adresy sa väčšinou uvádzajú v 16-kovej sústave. Okrem tohoto existuje aj referenčný a dereferenčný operátor. Dereferenčný operátor je zhodou okolností opäť hviezdička a toto ťa mýli. Dereferenčný operátor pred názvom pointra vráti hodnotu, na ktorú pointer ukazuje. Referenčný operátor (&) pred názvom premennej vráti adresu, na ktorej sa premenná nachádza.
Kód:
char a = 'A';
char* b = &a;
V tomto, ani podobných prípadoch nemeníš premennú a na smerník. a stále ostáva premennou typu char, v ktorej je uložené písmenko A. Premenná b je smerník na char, ktorý odkazuje na premennú A. S týmto smerníkom teraz môžeš pracovať ako so smerníkom. Zápis &a nemení a na smerník, ale vracia adresu premennej A. Zápis *b nemení b na smerník, b je smerník a týmto zápisom pristupuješ k premennej, na ktorú ukazueje, teda k premennej a. Po takomto zápise môžeš hocikde v kóde nahradiť a zápisom *b a efekt bude úplne rovnaký.
Kód:
int i = 1;
int *j = &i;
char *c = (char *) j;
V tomto prípade sa deje to, že do smerníku j som vložil adresu premennej i (druhý riadok). V treťom riadku pretypovávam typ smerník na int na typ smerník na char.