DereferenceDereference je v programování operace, kterou se získává přístup k proměnné, na níž se odkazuje ukazatel nebo reference. V některých případech a jazycích je dereference implicitní (např. reference v C++), ve většině jazyků je však třeba použít unární operátor dereference. Operátor dereference se zapisuje různě. V jazyce Pascal se na rozdíl od většiny ostatních jazyků zapisuje operátor za ukazatel; ve standardním Pascalu se pro dereferenci používá symbol šipka ( Příklady použitíJazyk CAplikací operátoru dereference na proměnnou, která je ukazatelem, je l-hodnota ekvivalentní hodnotě na adrese, na kterou ukazuje ukazatel. Tomuto se říká „dereferencování“ ukazatele. Například následující kód v jazyce C přiřadí hodnotu 1 do proměnné int x;
int *p; // použití * v deklaraci:
// p je ukazatel na integer, takže (po dereferencování)
// *p je integer
x = 0;
// nyní x == 0
p = &x; // & získá adresu proměnné x
// nyní *p == 0, protože p == &x a proto *p == x
*p = 1; // toto je ekvivalentem x = 1, protože p == &x
// nyní *p == 1 a x == 1
Vícenásobné použitíV jazycích C a C++ mohou ukazatelé ukazovat na ukazatele, a v takovém případě jsou potřebné vícenásobné aplikace operátoru dereference. Unární operátor * se pak v případech vícenásobných dereferencí může používat opakovaně. Podobně operátor tečka v jazyce Java lze používat při vytváření složitých výrazů, které při vyhodnocování vyžadují opakované dereferencování ukazatelů. Jedním z příkladů vícenásobného použití dereference je práce s parametrem Jiná syntaxeV předchůdci jazyka C, v jazyce BCPL, se pro dereferenci používá symbol vykřičník. V jazyce C se adresa struktury (nebo unionu) p = &s; // adresu s ulož do p; p == &s;
// *p je ekvivalentem s
Pro přístup k položce p = &s; // ulož adresu s do p; p == &s;
// s.a je ekvivalentem (*p).a
// s.a je ekvivalentem p->a
// (*p).a je ekvivalentem p->a
Operátory V unixových shellových skriptech a programech jako make se znak dolar ( V různých jazycích se v identifikátorech používají prefixy známé jako sigily. Nejde o unární operátory – syntakticky jsou lexikální částí identifikátoru, a mají jinou sémantiku, např. indikují typ identifikátoru – ale jsou syntakticky podobné operátoru dereference a mohou se s nimi plést. Například in shellovém skriptu OdkazyReferenceV tomto článku byl použit překlad textu z článku Dereference operator na anglické Wikipedii. Související články |