Int main ()
,< Отпечатано в полном соответствии с качеством предоставленных диапозитивов в ОАО ордена «Знак Почета» «Смоленская областная типография им. В. И. Смирнова». 214000, г. Смоленск, проспект им. Ю. Гагарина, 2. Издательство «Психотерапия» 129337, Москва, а/я 70 http://www.optbook.narod.ru Лекция 13 УКАЗАТЕЛИ Цель лекции. Уяснить понятия указателя и адресации памяти. Изучить особенности использования указателей в языке С++. Основные вопросы лекции. 1. Понятие указателя. 2. Разыменование указателей. 3. Операции с указателями. 4. Указатели и массивы
Понятие указателя. Переменная базового типа или производного типа занимает в памяти определенную область (количество ячеек). Расположение переменной в памяти определяется адресом. При объявлении переменной для нее резервируется место в памяти. Размер зарезервированной памяти зависит от типа данной переменной.
Для доступа к содержимому выделенной памяти служит его имя (идентификатор). Для того чтобы узнать адрес конкретной переменной, служит операция взятия адреса. Синтаксис операции:
&ИмяПеременной
То есть перед именем переменной ставится знак &. Рассмотрим пример использования указателя.
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х. Представление чисел в разных системах исчисления приведено в следующей таблице.
В языке С++ принято следующее распределение памяти:
адреса
Адреса локальных переменных размещаются в стеке. Поэтому их адреса следуют в обратном порядке (стек растет в направлении младших адресов). Разница в адресах Var1 и Var2 всегда будет одинаковая и при 4-х байтовом представлении чисел типа int составит 4 байта.
В языке С++ есть возможность осуществлять непосредственный доступ к памяти. Для этого предусмотрен специальный тип переменных – указатели.
Указатель – это переменная, содержащая адрес некоторого объекта. Объектом может быть: переменная базового или производного типа или функция. В общем случае – это просто целое число!
Адрес Адрес + 1 Адрес + 2 Адрес + 3 Адрес + 4 Адрес + 5
Если переменная будет указателем, то она должна быть объявлена в программе. Указатель в программе объявляется следующим образом: ТипОбъекта *Идентификатор;
Здесь “ ТипОбъекта ” определяет тип данных, на которые ссылается указатель с именем “ Идентификатор ”. Символ * (звездочка) означает, что следующая за ней переменная является указателем. При объявлении указателя под него резервируется 4 байта. Примеры объявления указателей: Char *ch; int *temp, i, *z; float f,*ptr;
Здесь объявлены указатели ch, temp, z, ptr и переменные i и f.
Поскольку указатель является ссылкой на некоторую область памяти, ему может быть присвоен только адрес переменной, а не ее значение.
Рассмотрим пример объявления и инициализации указателя. #include <iostream.h>
|