int *pi; // smernik na int char** cpp; // smernik na smernik na char int (*vp)[10]; // smernik na vektor zlozeny z 10 int int (*fp)(char, char*);// smernik na funkciu, ktora ma argumenty (char, char*) // a vracia intZákladnou operáciou nad smerníkmi je dereferencovanie, to znamená oslovenie objektu, na ktorý ukazuje smerník. V nasledujúcom príklade je použitý operátor &, prostredníctvom ktorého vieme získať adresu objektu, na ktorý sme operátor uplatnili.
#include <iostream.hpp> void main() { int i=0x1234; // deklaracia a definicia premennej i int *pi; // deklaracia a definicia smernika na int, smernik // ukazuje nevedno kam pi=&i; // inicializacia smernika adresou premennej i *pi=0x4321; // dereferencia - spristupnenie a pouzitie hodnoty premennej i cout<<"Hodnota i = "<<hex<<i<<endl; cout<<"Adresa &i = "<<(&i)<<endl; cout<<"Hodota pi = "<<(pi)<<endl; cout<<"Adresa &pi = "<<(&pi)<<endl; }Situáciu znázorňuje obrázok, Vo vašom prípade budú hodnoty adries zrejme odlišné.
Smerníkmi v C++ sú aj mená polí a mená funkcií. Ak vytvoríme a inicializujeme pole 10 hodnôt int, napríklad:
int array[10] = {9,8,7,6,5,4,3,2,1,0};potom je array smerníkom na prvý prvok poľa. Na rozdiel od predchádzajúceho príkladu je tento smerník konštantný, nie je možné tomuto smerníku priradiť inú hodnotu, ale je možné manipulovať s hodnotou tohoto smerníka.
int i; i = array[0]; // spristupnenie prveho prvku pola operatorom [] i =*array; // to iste dereferenciou smernika i =*(array+5); // spristupnenie piateho prvku pola i =*array+5; // spristupnenie hodnoty prveho prvku pola zvysenej o 5Pretože operátor [] spočítava jednoducho adresu poľa s argumentom operátora, je možná aj takáto, z matematického pohľadu nezmyselná, ale formálne správna konštrukcia
i =5[array]; // spristupnenie piateho prvku polaTextové reťazce sú špecialnou formou znakových polí, od obyčajného poľa sa odlišujú len tým, že majú ukončovací znak - nulu. Veľkosť poľa, ktoré obsahuje textový reťazec je v skutočnosti o jednu väčšie, ako je počet znakov v reťazci. S textovými reťazcami pracujeme tak isto ako s inými poliami.
char *text = "Tento textovy retazec je v skutocnosti pole charakterov"; char c = *text; char q = text[0];