
Лекция 13 указатели
Цель лекции. Уяснить понятия указателя и адресации памяти.
Изучить особенности использования указателей в языке С++.
Основные вопросы лекции.
1. Понятие указателя.
2. Разыменование указателей.
3. Операции с указателями.
4. Указатели и массивы
1. Понятие указателя.
Переменная базового типа или производного типа занимает в памяти определенную область (количество ячеек). Расположение переменной в памяти определяется адресом. При объявлении переменной для нее резервируется место в памяти. Размер зарезервированной памяти зависит от типа данной переменной.
Для доступа к содержимому выделенной памяти служит его имя (идентификатор). Для того чтобы узнать адрес конкретной переменной, служит операция взятия адреса. Синтаксис операции:
&ИмяПеременной
То есть перед именем переменной ставится знак &.
Рассмотрим пример использования указателя.
Int main ()
{
int Var1=4000;
int Var2=300;
cout<<”Znachenie Var1= “<Var1<<endl;
cout<<”Adres Var1= “<&Var1<<endl;
cout<<”Znachenie Var2= “<Var2<<endl;
cout<<”Adres Var2= “<&Var2<<endl;
}
После запуска программы на экране появится следующая информация:
Znachenie Var1= 4000
Adres Var1= 0x0012FF7C
Znachenie Var2= 300
Adres Var2= 0x0012FF78
Адреса переменных записаны в шестнадцатиричной системе счисления. Признаком 16-ричного числа являются символы 0х.
Представление чисел в разных системах исчисления приведено в следующей таблице.
Десятичное число |
8–ричное число |
16–ричное число |
Двоичное число |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
2 |
2 |
2 |
10 |
3 |
3 |
3 |
11 |
4 |
4 |
4 |
100 |
5 |
5 |
5 |
101 |
6 |
6 |
6 |
110 |
7 |
7 |
7 |
111 |
8 |
10 |
8 |
1000 |
9 |
11 |
9 |
1001 |
10 |
12 |
А |
1010 |
11 |
13 |
B |
1011 |
12 |
14 |
С |
1100 |
13 |
15 |
D |
1101 |
14 |
16 |
E |
1110 |
15 |
17 |
F |
1111 |
В языке С++ принято следующее распределение памяти:
Стек |
Свободная память |
Раздел глобальных переменных и констант |
Программа |

Младшие
адреса
Адреса локальных переменных размещаются в стеке. Поэтому их адреса следуют в обратном порядке (стек растет в направлении младших адресов). Разница в адресах Var1 и Var2 всегда будет одинаковая и при 4-х байтовом представлении чисел типа int составит 4 байта.
В языке С++ есть возможность осуществлять непосредственный доступ к памяти. Для этого предусмотрен специальный тип переменных – указатели.
Указатель – это переменная, содержащая адрес некоторого объекта. Объектом может быть: переменная базового или производного типа или функция. В общем случае – это просто целое число!
Переменная
Указатель
на переменную
|
Значение переменной |
. |
. |
Адрес + 1 |
|
Адрес Адрес + 1 Адрес + 2 Адрес + 3 Адрес + 4 Адрес + 5
Если переменная будет указателем, то она должна быть объявлена в программе. Указатель в программе объявляется следующим образом:
ТипОбъекта *Идентификатор;
Здесь “ТипОбъекта” определяет тип данных, на которые ссылается указатель с именем “Идентификатор”. Символ * (звездочка) означает, что следующая за ней переменная является указателем. При объявлении указателя под него резервируется 4 байта.
Примеры объявления указателей:
Char *ch;