С ++ тілінде көрсеткішті жариялау

Дэвис Стивен Р.

TOcharC ++ тіліндегі айнымалы, ASCII символын ұстауға арналған, anintбүтін сан және аекі есеөзгермелі нүкте. Сол сияқты көрсеткіштің айнымалысы жадтың адресін ұстауға арналған. Сіз көрсеткіштің айнымалысын келесі мысалдағыдай объектінің типіне соңына (*) қосу арқылы жариялайсыз:



char* pChar; // pointer to a character int* pInt; // pointer to an int

Басқа инициализацияланбаған көрсеткіштің айнымалысында белгісіз мән болады. Амперсандты қолдану (&) операторы, сол типтегі айнымалы адресі бар көрсеткіш айнымалы инициализациялауға болады:



char cSomeChar = 'a'; char* pChar; pChar = &cSomeChar;

Бұл үзіндіде айнымалыcSomeCharмекен-жайы бар. Аргумент үшін C ++ оған 0x1000 мекен-жайын берді деп айтыңыз. (C ++ символмен сол орынды инициализациялады«дейін».) АйнымалыpCharөзіндік орналасуы бар, мүмкін 0x1004. Өрнектің мәні& cSomeChar0x1000, ал оның түріchar *(көрсеткішті оқыңызchar).

Сонымен, үзінді мысалының үшінші жолындағы тапсырма 0x1000 мәнін айнымалыда сақтайдыpChar.



image0.jpg

атиптік антипсихотиктер дегеніміз не?

Фигура мен фрагменттегі C ++ кодының үш жолының арасындағы байланысты шынымен түсінуге бір минут уақыт бөліңіз. Бірінші декларацияда айтады, шығыңыз және жадыдан 1 байтты орынды табыңыз, оған атау беріңізcSomeChar, және оны инициализациялаңыз«дейін». Бұл мысалда C ++ 0x1000 орнын таңдады.

Келесі жолда а-ның мекен-жайы сақталатындай үлкен орын тауып шығыңыз дейдіcharайнымалы және оған атау беріңізpChar. Бұл мысалда C ++ тағайындалғанpChar0x1004 орнына.



Үшінші жолда адресті тағайындаңыз дейдіcSomeChar(0x1000) айнымалығаpChar. Сурет бағдарламаның осы үш тұжырымнан кейінгі күйін білдіреді.

Енді не? сіз айтасыз. Міне, келесі өрнекте көрсетілгендей керемет бөлік бар:

*pChar = 'b';

Бұл жолда а'B'кезіндеcharкөрсетілген орынpChar. Бұл келесі суретте көрсетілген. Осы өрнекті орындау үшін C ++ алдымен сақталған мәнді шығарадыpChar(бұл 0x1000 болар еді). Содан кейін ол кейіпкерді сақтайды'B'сол жерде.

image1.jpg

The*екілік оператор ретінде қолданғанда көбейту дегенді білдіреді; біртұтас оператор ретінде қолданылғанда,*көрсетілген затты табу дегенді білдіреді. Сол сияқты&екілік оператор ретінде мағынасы бар, бірақ унарлы оператор ретінде бұл адресті алуды білдіреді.

Сонда бұл не қызықтырады? Ақыр соңында, сіз дәл осындай нәтижеге a тағайындау арқылы қол жеткізе аласыз'B'дейінcSomeCharтікелей:

cSomeChar = 'b';

Неліктен оның мекен-жайын жадында алудың аралық кезеңінен өту керек? Себебі тек көрсеткіштермен шешілетін бірнеше проблемалар бар.