Отправляет email-рассылки с помощью сервиса Sendsay

Уроки по C/C++

  Все выпуски  

Уроки по C/C++


Информационный Канал Subscribe.Ru

C/C++. Уроки с сайта http://progs.biz

Рассылка №11

C/C++. Урок 15. Указатели.

Полные версии уроков (с картинками) можно найти по адресам:
Урок 15. Указатели.

Д. Круглински и др. Программирование на Microsoft Visual C++ 6.0 для профессионалов
Д. Круглински, С. Уингоу, Дж. Шеферд. Программирование на Microsoft Visual C++ 6.0 для пофессионалов
Заказать на piter.com

Подробнее

Рассылки сайта progs.biz через subscribe.ru
Уроки по C++ Builder
Уроки по программированию на C++ Builder. Библиотека VCL, создание собственных компонентов, работа с базами данных, примеры, FAQ. Уроки разбиты на серии. Каждая серия независима от других.

C/C++. Урок 15. Указатели

Указатель - одно из важных понятий языка C/C++. Начинающие программисты поначалу путаются, но со временем все должно встать на свои места.

Итак, каждая переменная имеет свой адрес в адресном пространстве. Так вот, указатель - это переменная, которая хранит адрес другой переменной. Т. е. если в переменной обычного типа хранится, например, целое число, то в переменной-указателе может храниться адрес переменой, в котрой хранится целое число. Все это справедливо, разумеется, не только для целого типа, но и любого другого.

Указатели различаются по типам. Например, указатель на целое может хранить адрес переменной целого типа, а указатель на тип float - адрес переменной типа float.

Указатель на определенный тип объявляем так: сначала пишем этот тип, потом пишем звездочку и затем произвольное имя переменной. Пример:

int * p1; // Указатель на целое.
bool * p2; // Указатель на тип bool.

Так же как и для переменных обычного типа для переменных типа указатель мы при объявлении имеем в такой переменной мусор - т. е. некотрый непонятный адрес. Существует два способа записи инициализации указателя - записать в него адрес существующей переменной соответствующего типа или выделить новый участок памяти через ключевое слово new.

Вот пример на первый способ:

    int z=20;
    int *p=&z;

Тут мы в указатель p записали адрес переменной z.

А вот пример на второй способ инициалиазации указателя - через ключевое слово new:

int *p=new int;

В этом случае мы говорим, что память у нас выделена динамически. Синоним этого - память выделена в куче (heap). В противоположность этому память для переменных обычного типа (не указателей) выделяется в стеке.

И в первом, и во втором способах в переменной p будет храниться указатель (адрес) целого типа. Для того, чтобы через этот адрес работать с тем местом, на котрое он указывает (т. е. в нашем случае с некоторым целым числом), мы используем так называемое разыменование указателя. Вот пример:

...
*p=123; //Записываем 123 в место, на которое указывает указатель p.
cout<<p<<"\n"; //Выведется некий адрес (например, 0x0012FF7C)
cout<<*p<<"\n"; //Выведется 123;

Т. е. для доступа к тому месту, на которое указывает указатель, мы перед его именем добавляем звездочку.

Таким образом по сути разыменование указателя - это доступ к тому месту на которое указатель указывает.

Для указателей существует некий аналог нуля - это значение NULL. Вот пример:

int *p=NULL;

На самом деле NULL определена как 0, поэтому в большинстве способов можно писать 0 вместо NULL.

Пока это было краткое знакомство с указателями. Подробности - в следующих уроках.

Наверх

Copyright Алексеев Игорь, 2002-2003
Copyright сайт progs.biz, 2002-2003
Распространение материалов без разрешения владельцев авторских прав запрещено.


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное