Loading...

Какво е "Pointer"?

avatar Георги Кацаров 2 минути
Какво е "Pointer"?

В компютърната наука "Pointer" (или "показалец") е обект в даден програмен език, който съхранява адрес на памет. Пойнтерът препраща към място (локация) в паметта и придобиването на стойност съхранена в тази локация и получаването на стойността, която е съхранена в тази локация е процес известен като "дереференсиране на пойнтера". Аналогичен е примерът с книгата: в една книга имате съдържание, в което са изброени различни теми и на коя страница започва всяка от тях. Числото с която е изразен номерът на страницата може да се разглежда като pointer, който води до съответната страница. Дерефенсирането на pointer-а, може да се направи чрез прелистване до съответната страница и прочитането на текста там. Разбира се актуалния формат и съдържание на pointer промненливата зависят от компютърната архитектура върху която се създават.

Pointer-ите са по-простият и конкретен вариант за имплементация на някои по-абстрактни референтни типове данни. Тъй като те позволяват и двата начина на достъп до паметта (защитен и незащитен) съществуват рискове свързани с тяхната употреба (най-вече при незащитен достъп). Примитивните pointer-и често се съхраняват във формат близък до целочисления. При опит обаче да дереференсирате (т.е. да видите кой е pointer-a, прочитайки съдържанието), чиято стойност не е валиден адрес в паметта, най-вероятно ще причини забиване на програмата. За да се избегне този евентуален проблем, pointer-ите се разглеждат като тип данни, по тип съответстващ на типа данни към които сочи, дори ако основната репрезентация на pointer-a е от целочислен тип. Други мерки също могат да се приложат (като нпаример валидация и проверка на границите), за да се гарантира, че променливата на pointer-a съдържа стойност, която е едновременно и валиден адрес в паметта, и в числовия диапазон на процесора, така че той да може да го адресира.

Каква е ползата от използването на pointer-и?

Прилагането на pointer-и значително подобрява производителността при репетитивни (повторяеми) операции, като напримнер обхождането на определени типове структури от данни (текстови низове, lookup таблици, контролни таблици или дървесни структури). Често пъти копирането на pointer-и спестява време и пространство, отколкото да копирате и достъпвате данните, до които pointer-ите водят.

Pointer-ите също така съдържат адресите на входни точки за извиканите подпрограми при процедурното програмиране или за run-time връзките към динамичните библиотеки ("dynamic link libraries" или "DLL"). При обектно-ориентираното програмиране, pointer-и сочещи към фунцкии се използват за свързване с методи, често пъти използвайки т.нар. "virtual method tables".

Добрите умения за работа с pointer-и са от ключово значение за пълноценното овладяване на програмният език C++ и затова са залегнали в програмата на нашия курс "C++ Advanced - юни 2020". Ако вече сте придобили основни знания за работа с него (познавате и работите безпроблемно със структури от данни като list, map, set, работите безпроблемно с класове) - запишете се. Неговата практическа програма ще ви позволи да надградите и развиете знанията си. Не се колебайте, очакваме ви!