Указатель - переменная, содержащая адрес области в памяти компьютера. Указатель - переменная, которая содержит адрес области в операционной памяти.Указатель - переменная, хранящая адрес другого объекта.
пример:
int *PAge = NULL;
Этой строкой переменная PAge объявляется указателем типа int. В результате будет получена переменная PAge, предназначенная для храниения адреса значения типа int.
PAge -обычная переменная. При объявления перменной целочисленного типа ( нпример,int) указывается, что она будет хранить целое число. Когда перменная объявляется указателем на какой-либо тип, это значит, что она будет хранить адрес переменной определенного типа ( в данном случае - типа int ).
При обявлении указателя задают тип переменной, на которую он должен указывать. Это позволяет увеломить копилятор о том, как именно воспринимать область памяти, на которую он указывает. Сам указатель сожержит лишь адрес.
После объявления указателю обязательно нужно присвоить какое-либо значение. Если предназначенный для хранения указателя адрес заранее не известен, ему следует присвоить значение NULL. Указатели значения NULL.., называют пустыми.
Чаще всего указатели применяются в :
- манипулирование данными в динамической распределяемой памяти;
- доступ к переменным-членам и функциям класса;
- передача данных между функциями по ссылке;
29)Указатели и адреса.
Указатель (pointer) – переменная, содержащая адрес другой переменной.
тип *<имя переменной-указателя>
С помощью указателя осуществляется косвенная адресация (indirection).
Назначение указателей
- Для размещения данных в свободных областях памяти (heap) и доступа к ним.
- Для доступа к переменным и функциям классов.
- Для передачи параметров в функции по ссылке.
С указателями используются следующие операции:
- & - взятие адреса переменной;
- * - разыменование указателя, т.е. получение доступа к объекту;
- -> - разыменование члена структуры;
- [] - индексация, доступ к элементу массива, при этом считается, что указатель содержит адрес 0 элемента.
Операция индексации может быть реализована с помощью адресной арифметики, где применяются операции ++,--, и +, -. Можно создавать указатели на любые типы за исключением ссылок и битовых полей. Указатель может указывать не только на данные, но и на область кода, т.е. на функцию.
Указатель — это переменная, содержащая адрес некоторого элемента данных (переменной, константы, функции, структуры). В языке C указатели тесно связаны с обработкой массивов и строк.
Для объявления переменной как указателя используется оператор *:
Определение адреса.
Физический адрес любой переменной можно узнать при помощи стандартной функции addr(<имя_переменной>):<указатель> или унарной операции @<имя_переменной>.
В зависимости от значения директивы компилятора {$T}, результатом операции @ будет либо типизированный указатель , тип которого будет определен в соответствии с типом использованной переменной, либо не типизированный указатель pointer .
Разыменование
Для того чтобы воспользоваться значением, хранящимся по некоторому адресу, необходимо его оттуда "извлечь". Унарная операция ^ называется разыменованием и записывается по следующему шаблону: <имя_указателя>^
Результатом операции ^ является значение, хранящееся по указанному адресу. Тип этого значения будет определяться типом ( типизированного ) указателя. К не типизированным указателям операцию разыменования применять нельзя.
Для присвоения адреса некоторой переменной указателю используется оператор &, например:
char *p; // объявляем указатель (способен содержать адрес хранения любого символа);
char c = 'А'; // объявляем символьную переменную с;
р = &c; // теперь p содержит адрес хранения символа c.
Для того чтобы извлечь значение переменной, на которую указывает указатель, используется оператор разыменования *.
char *p;
char b; char c = 'А';
р = &c;.
b = *р; // теперь b равняется не адресу хранения переменной c, а значению переменной c, то есть 'А'.
Аналогичным образом, этот оператор можно использовать и для присвоения некоторого значения переменной, на которую указывает указатель:
char *p;
char b, char c = 'А';
р = &b; // теперь p содержит адрес хранения ещё не инициализированной переменной b;
*р = b; // инициализируем переменную b значением 'А'.