Қатысушы:Aliya Yenikeyeva/зертхана
Дерефикация Операторы
өңдеуКейде «*» (мысалы, жұлдызша) деп белгіленетін дерефикация операторы немесе жанама оператор - бұл С-тәрізді тілдерде табылған, сілтегіш айнымалы құрамына кіретін бірыңғай оператор (яғни, бір операнд бар). Ол меңзер айнымалысымен жұмыс істейді және l-мәнін сілтегіш адресіндегі мәнге қайтарады. Мұны меңзегіш «теріске шығару» деп атайды.
Код мысалы:
int x;
int *p; // * is used in the declaration:
// p is a pointer to an integer, since (after dereferencing),
// *p is an integer
x = 0;
// now x == 0
p = &x; // & takes the address of x
// now *p == 0, since p == &x and therefore *p == x
*p = 1; // equivalent to x = 1, since p == &x
// now *p == 1 and x == 1
дерефикация операторына және x айнымалыға сілтегішті қолдана отырып, x айнымалысына 1 тағайындалды.
Құрамы
өңдеуС + және С ++ анықталған бірыңғай * оператор композиттерде бірнеше жанама жағдайларда қолданылуы мүмкін, мұнда бірнеше өлім әрекеті қажет. Сілтегіштер, әрине, басқа көрсеткіштерге сілтеме жасай алады, және мұндай жағдайларда теріс оператордың бірнеше қосымшалары қажет. Осыған ұқсас, Java нүкте операторын бағалау кезінде сахна артындағы көрсеткіштерді айтарлықтай кешіктіруді қажет ететін күрделі тұжырымдарды құрайтын композицияларда қолдануға болады.
Бірнеше көрсеткіштердің жанама көрсетілуінің негізгі мысалы ретінде C (және C ++) функциясының аргументі, ол char ** argv прототипінде берілген. Орындалатын орындалатын бағдарламаның атауы, сонымен қатар барлық командалық жол аргументтері тәуелсіз таңбалар жолдары түрінде сақталады. Char көрсеткішіне арналған массивте осы жолдардың әрқайсысының бірінші таңбасына арналған көрсеткіштер болады, ал бұл көрсеткіштер негізгі функцияға argv дәлел ретінде беріледі. Өткізілген массивтің өзі меңзерге «ыдырайды», осылайша argv іс жүзінде көрсеткіштің сілтегішіне char дегенді білдіреді, тіпті бұл char to көрсеткіштеріне арналған массивті білдіреді (сол сияқты, массивтегі көрсеткіштер, әрқайсысы ресми түрде біреуін көрсетсе) char, кейіпкерлердің жолдары дегенді көрсетіңіз) Ілеспе негізгі аргумент, аргумент, массивтің көлемін (яғни, массивтің элементтерімен белгіленген жолдар санын) қамтамасыз етеді, өйткені функцияға өтіп, түрлендірілген кезде массивтің өлшемі басқа жолмен жоғалады. көрсеткішке. Осылайша, argv дегеніміз сілтегіштер массивінің 0-ші элементіне сілтегіш, * argv, бұл өз кезегінде ** argv, таңбаны көрсететін (дәлелі, бірінші аргумент жолының 0-ші таңбасы, конвенция бойынша бағдарламаның атауы).
Басқа синтаксис
өңдеуBCPL-де, С-тің бабасы, баламалы оператор леп белгісін қолдана отырып ұсынылған.
С-да құрылымның s (немесе одақтың) мекен-жайы &s әрпімен белгіленеді. Оператордың мекенжайы & кері теріске шығару операторының кері мәні болып табылады, сондықтан * және s мәні s-ге тең. Құрылымның (немесе кәсіподақтың) мекен-жайы p көрсеткішіне тағайындалуы мүмкін:
p = &s; // the address of s has been assigned to p; p == &s; // *p is equivalent to s
S құрылымының мүшесінің мәні s.a арқылы белгіленеді. P-ге сілтегіш берілген (мысалы, p == & s), sa теңдікпен (* p) .а, сонымен бірге құрылымның (немесе одақтың) мүшелеріне кіру үшін синтаксистік қант болып табылатын p-> a-ға тең болады. көрсеткіш:
p = &s; // the address of s has been assigned to p; p == &s;
// s.a is equivalent to (*p).a
// s.a is equivalent to p->a
// (*p).a is equivalent to p->a
-> операторын тізбектеуге болады; мысалы, байланыстырылған тізімде екінші келесі түйін үшін n->next-> next сілтейді (n-> next бос болмайды).
Unix қабық сценарийлерінде және Makefiles сияқты утилиталарда «$» доллар белгісі ауыспалы атауды оның мазмұнына аудару үшін қолданылады және айнымалыға тағайындалған кезде мүлдем жоқ.
Әр түрлі тілдерде префикстер сигиль деп аталатын идентификаторларда қолданылады. Бұл нотариаттық операторлар емес - синтаксистік тұрғыдан олар идентификатордың лексикалық бөлігі және идентификатордың деректер түрін көрсету сияқты әртүрлі семантикаға ие - бірақ синтаксистік тұрғыдан дерефер операторына ұқсас және онымен шатастыруға болады. Мысалы, сценарийде $ FOO - бұл FOO айнымалысына қолданылатын дербес оператор $, ал Perl $ foo-де foo деп аталатын скалярлық айнымалы қолданылады. PHP-де FOO - тұрақты (пайдаланушы анықтаған немесе кіріктірілген), $ FOO - FOO деп аталатын айнымалы, ал $$ FOO - айнымалы, аты FOO деп аталатын айнымалы түрінде сақталады.