* | smerník |
& | referencia |
[ ] | vektor |
() | funkcia |
Jednoduchý príklad:
int *a; float v[10]; char* p[20]; void f(int); struct str{short dlzka; char *p };Problémy pri dekódovaní komplikovanejších odvodených dátových typov vyplývajú hlavne zo skutpčnosti, že * a & sú prefixové operátory a [ ] a ( ) sú postfixové operátory, pritom pri typoch, pri ktorých je priorita operátorov kritická, musia byť použité zátvorky. Pretože operátor [ ] má vyššiu prioritu ako ( ), platí:
int* v[10]; // vektor zo smernikov int (*p)[10]; // smernik na vektorJednoduchým spôsobom, ako dekódovať deklaráciu odvodeného dátového typu je, začať od mena a podľa priority operátorov sa presúvať zľava do prava a naopak, pričom je treba rešpektovať zmeny priority zátvorkami. Poslednú deklaráciu dekódujeme takto:
p - meno *p - smerník (*p) - zmena priority (*p)[10] - smerník na pole 10 prvkov int (*p)[10] - smerník na pole 10 prvkov typu intVäčšina ľudí si jednoducho pamätá, ako vyzerajú najčastejšie používané deklarácie dátových typov. Pokiaľ sa ale chcete stať svetovým preborníkom v dekódovaní dátových typov, doporučujem Vám skúsiť Cvičenie 0101.
Niekedy môže byť dosť zdĺhavé, vypisovať pre každý dátový typ jednotlivé deklarácie, zvlĺášť vtedy, ak typy sú identické. V základných dátových typoch sme videli takúto formy deklarácie premenných:
int x, y; // ekvivalent pre int x; int y;Pri odvodených dátových typoch je treba postupovať veľmi opatrne. Operátory totiž pôsobia len na jednotlivé mená, nie na iné mená v tej istej deklarácii:
int *p, y; // ekvivalent pre int* p; int y; NIE int* y; int x, *p; // int x; int *p; int v[10], *p; // int v[10]; int *p;Je zrejmé, že používanie takýchto konštrukcií môže spôsobiť veľa príjemných chvíl strávených za klávesnicou počítača.