Указатели. Част 1. Общи понятия. видове указатели. Управлявани и неуправляеми указатели. Функционални указатели. Примери за използване
Указатели. Част 1. Общи понятия. видове указатели. Управлявани и неуправляеми указатели. Функционални указатели. Примери за използване
Съдържание
1. Какво е указател? Дефиниция на показалеца. Начини за достъп до променлива
Едно от предимствата на C++ пред другите езици за програмиране е използването на указатели за достъп до променлива. Освен това, както знаете, една променлива може да бъде достъпна чрез нейното име.
С помощта на указатели можете удобно да организирате, например свързани списъци, динамично разпределение на паметта и т.н.
2. Какви типове указатели се поддържат в C++?
Във Visual C++ (CLR - Common Language Runtime) се поддържат три типа указатели:
- управлявани указатели
- неуправляеми указатели ( неуправляеми указатели );
- указатели на неуправлявани функции.
3. Каква е разликата между управлявани и неуправляеми указатели?
Разликата между управляваните и неуправляваните указатели е следната:
В този случай паметта енерегулирана.
4. Какво представляват указателите от референтен тип или управляваните указатели?
В такива указатели вместо знака‘*’ се използва символът ‘^’. Помощната програма gcnew се използва за разпределяне на памет за управляван указател.
5. Пример за използване на управлявани указатели. помощна програма gcnew и ключова дума ref в Visual Studio C++
В управляваните указатели помощната програма gcnew инстанцира някакъв обект. Помощната програма gcnew заделя памет за екземпляр на обект и връща препратка към този обект.
Описанието на този обект трябва да започва с ключовата дума ref. Ключовата дума ref даваинформация, че описанието е от справочен тип. Общата форма на използване на ключовата дума ref е:
След такова описание, паметта за обекта се разпределя с помощта на помощната програма gcnew.
Пример. Примерът демонстрира:
- описание на структурата на типа BOOK на справочния тип, който съдържа информация за книгата;
- използване на ключовата дума ref за указване, че структурата е от референтен тип;
- използване на помощната програма gcnew за разпределяне на памет за структура;
- демонстрация на използване на управлявани указатели за работа с обекти.
Нека следната структура бъде описана извън описанието на класа:
След това в методите на този клас можете да използвате структурата BOOK приблизително както следва:
6. Какво представляват неуправляваните указатели и неуправляваните указатели на функции?
Неуправляваните указатели са традиционни C/C++ указатели. Те са указатели към обекти в неуправляваното количество памет, което е разпределено за изпълнение на програмата. Неуправляваните указатели не са съвместими със спецификацията на CLR.
Неуправляваните указатели на функции са указатели на функции, които могат да се третират по същия начин като указателите на неуправляван обект (данни).
Спецификата на използването на неуправляеми указатели е описана вследващата тема.
- variable_type е типът на променливата, към която сочи указателят. Нарича се още тип базов указател;
- pointer_name е името на променливата на указателя.
Пример. Описание на указатели, които сочат към различни типове променливи.
Фигура 1 схематично показва използванетоуказатели към тип int.

Фигура 1. Използване на указател за въвеждане на int
Както показва фигура 1, указател може да се използва за достъп до променлива и промяна на нейната стойност. В този случай типът, към който сочи указателят, трябва да съответства на типа на променливата.
9. Пример за използване на указател на неуправляема функция.
Функционалните указатели ви позволяват да организирате извиквания на функции под формата на верига, в зависимост от изискванията. В този случай функциите, които извършват различна работа, трябва:
- имат еднакъв брой и тип аргументи;
- връща стойност от същия тип.
- тип - типът на стойността, върната от функцията.
Пример. Използване на указател на неуправляема функция за конзолно приложение.
Описание и използване на указател към функция с име func_ptr, която приема два целочислени параметъра x, y и връща стойност от тип double.
Нека са дадени 2 функции, които имат еднакъв брой параметри и връщат една и съща стойност:
В конзолно приложение можете да използвате този указател, както следва:
Този начин на използване на указатели на функции е подходящ само за конзолни приложения.
10. Пример за използване на указател на управлявана функция в C++/CLI среда
Използване на указател на функция в C++/CLI среда заприложения, създадени от шаблона на Windows Forms. В този случай трябва да използвате така наречените делегати. Делегатите се поддържат в .NET Framework.
Нека са дадени 2 функции, които имат еднакъв брой параметри и връщат една и съща стойност:
За да използвате делегат, първо трябва на някое място от класа на формуляра (или другоклас) дават следното описание:
След това, в някакъв метод (например манипулатор на събития при щракване на бутон), можете да използвате този указател, както следва:
В горния пример, в редовете
идентификаторите имат следната цел:
- Lab1 – име на проекта;
- Form1 – име на основната форма за кандидатстване (име на променлива);
- Power е името на функцията.