Лекция 01. Тема Общая характеристика языков программирования высокого уровня
Download 4.1 Mb. Pdf ko'rish
|
Lektsii po YaP Lukinova 2 sem
- Bu sahifa navigatsiya:
- Операции над указателями
3.6. Указатели.
Указатель – переменная, значением которой может быть адрес ячейки памяти или особый символ 0, т.е. нулевой адрес, который используется как пометка того, что указатель свободен. Указатели используются в следующих случаях: 1. Организация косвенной адресации для нединамических объектов. В частности, в языке С указатели широко используются при обращении к массивам, строкам, структурам. И это является одним из факторов ненадежности данного языка. 2. Для организации обращения к ячейкам динамической памяти (кучи). Переменные, размещенные в куче, не имеют имен, обращаться к ним можно только с помощью указателей и ссылок. Как любая переменная, указатель должен иметь тип. Тип указателя определяет объем динамической памяти в байтах, выделяемой из кучи. Однако в языках существует два вида указателей: 1. Типизированные, когда тип указателя определяется типом переменной, на которую он будет указывать. В нижеприведенном примере все объявленные указатели являются типизированными. Пример 1. Язык Pascal: Язык С: var i,j : ^integer; char *ch; r : ^real; int *i, *j; ii : int; int ii; 2. Нетипизированные, тогда объем выделяемой памяти определяется с помощью специальных функций. Нетипизированные указатели существуют в языке Pascal, для их объявления задействован специальный тип pointer: var p : pointer; Операции над указателями: 1. Инициализация указателя – присваивание указателю адреса. Может происходить в следующих случаях: присваивание динамического адреса. По запросу пользовательской программы операционная система отводит блок ячеек динамической памяти и помещает адрес начальной ячейки в указатель, тем самым устанавливается связь между указателем и адресом. Для этого в языках используются специальные функции, например, Pascal – new(i); C – malloc(i); обеспечение косвенной адресации для нединамического объекта, например, массива: int*(A+индекс)=*A+индекс*длина; посредством операции взятия адреса (операция «амперсант»): i=ⅈ 2. Разыменование указателя – взятие (присваивание) значения из/в ячейки, на которую указывает указатель. Если, например, указатель i указывает на ячейку, которая содержит число 206, то оператор ii = *i; поместит это число в переменную ii, а оператор *i = 220; присвоит значение 220 в динамическую переменную, адрес которой содержится в указателе i. 3. Освобождение динамической памяти. Освободить память означает, что необходимо возвратить динамическую переменную в кучу, т.е. отдать ее адрес в распоряжение операционной системы. Для этого существуют специальные функции Dispose (i); (Pascal), Free (i); (С). Следует заметить, что, вообще говоря, эти функции не освобождают указатель, они только возвращают динамическую переменную в кучу. Для надежной работы программы необходимо производить и освобождение указателя (см. следующий пункт 4), хотя в некоторых языках операции 3 и 4 совмещены. 4. Освобождение указателя – помещение в него нулевого адреса (на примере языка Pascal). const c : pointer = NIL //нулевой адрес в Pasсal … dispose(i); i = c; Только после того, как в указатель занесли 0, его можно использовать для другого адреса. 5. Присваивание. Операцию присваивания можно реализовывать только для однотипных указателей: var p1, p2 : ^int; p3 : ^real; pp : pointer; begin p1 = p2; p1 = p3; //ошибка, чтобы ее обойти, надо использовать // // указатель рр: // pp=p3; // p1=pp; end. 5. Арифметические операции над указателями (осуществляются в адресном пространстве): операция “+”: int *p1; // длина int равна 4-м байтам p1 = 2000; p1 = p1+3 //оператор поместит в р1 адрес 2012 операция “-” : int *p1, *p2, a; a = p2 - p1; //смещение р2 относительно р1 6. Операции отношений: >, <, =, <=, >=. 7. Операция идентификация поля записи: p1 : ^record; //указатель на запись p1^ . fio; *p1.fio; Download 4.1 Mb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling