Читаем Освой самостоятельно С++ за 21 день. полностью

При работе с указателями в большинстве случаев не приходится иметь дело со значениями адресов, записанных в указателях. В предыдущих разделах отмечалось, что после присвоения указателю адреса переменной значением указателя будет именно этот адрес. Почему бы не проверить это утверждение? Для этого можно воспользоваться программой, приведенной в листинге 8.3.

Листинг 8.3. Что же записано в указателе?

1: // Листинг 8.3. Что же хранится в указателе?

2:

3: #include

4:

5:

6: int main

7: {

8:    unsigned short int myAge = 5, yourAge = 10;

9:    unsigned short int * pAge = &myAge // Указатель

10:   cout << "myAge:\t" << myAge << "\t yourAge:\t" << yourAge << "\n";

11:   cout << "&myAge:\t" << &myAge << "\t&yourAge\t" << &yourAge << "\n";

12:   cout << "pAge;\t" << pAge << "\n";

13:   cout << "*pAge:\t" << *pAge << "\n";

14:   pAge = &yourAge // переприсвоение указателя

15:   cout << "myAge:\t" << myAge << "\t yourAge;\t" << yourAge << "\n";

16:   cout << "&myAge:\t" << &myAge << "\t&yourAge:\t" << &yourAge << "\n";

17:   cout << "pAge:\t" << pAge << "\n";

18:   cout << "*pAge:\t" << *pAge << "\n";

19:   cout << "&pAge:\t" << &pAge << "\n";

20:   return 0;

21: }


Результат:

myAge:   5       yourAge:  10

&myAge:  0x355C  &yourAge: 0x355E

pAge:    0x355C 

*pAge:   5

myAge:   5       yourAge:  10

&myAge:  0x355C  &yourAge: 0x355E

pAge:    0x355E

*pAge:   10

&pAge:   0x355A

(Ваши результаты могут отличаться от приведенных.)


Анализ: В строке 8 объявляются две переменные типа unsigned short — myAge и yourAge. Далее, в строке 9, объявляется указатель на этот тип (pAge). Этому указателю присваивается адрес переменной myAge.

В строках 10 и 11 значения и адреса переменных pAge и myAge выводятся на экран. Обращение к значению переменной myAge путем разыменования указателя pAge выполняется в строке 13. Перед тем как перейти к дальнейшему изучению материала, подумайте, все ли вам понятно в рассмотренном примере. Еще раз проанализируйте текст программы и результат ее выполнения.

В строке 14 указателю pAge присваивается адрес переменной yourAge. После этого на экран выводятся новые значения и адреса переменных. Проанализировав результат программы, можно убедиться, что указатель pAge действительно содержит адрес переменной youtAge, а с помощью разыменования этого указателя можно получить ее значение.

Строка 19 выводит на экран значение адреса указателя pAge. Как любая другая переменная, указатель также имеет адрес, значение которого может храниться в другом указателе. О хранении в указателе адреса другого указателя речь пойдет несколько позже.


Рекомендуется:Используйте оператор разыменовывания (*) для получения доступа к данным, сохраненным по адресу, содержащемуся в указателе.

Инициализируйте указатель нулевым значением при объявлении, если заранее не известно, для указания на какую переменную он будет использоваться.

Помните о разнице между адресом в указателе и значением переменной, на которую ссылается этот указатель.


Использование указателей

Чтобы объявить указатель, запишите вначале тип переменной или объекта, на который будет ссылаться этот указатель, затем поместите символ звездочки (*), а за ним — имя нового указателя, например:

unsigned short int * pPointer =0;

Чтобы присвоить указателю адрес переменной, установите перед именем переменной оператор адреса (&), как в следующем примере:

unsigned short int theVariable = 5;

unsigned short int * pPointer = & theVariable;

Чтобы разыменовать указатель, установите перед его именем оператор разыменовывания (*):

unsigned short int theValue = *pPointer

Для чего нужны указатели

Перейти на страницу:

Похожие книги

Сущность технологии СОМ. Библиотека программиста
Сущность технологии СОМ. Библиотека программиста

В этой книге СОМ исследуется с точки зрения разработчика C++. Написанная ведущим специалистом по модели компонентных объектов СОМ, она раскрывает сущность СОМ, помогая разработчикам правильно понять не только методы модели программирования СОМ, но и ее основу. Понимание мотивов создания СОМ и ее аспектов, касающихся распределенных систем, чрезвычайно важно для тех разработчиков, которые желают пойти дальше простейших приложений СОМ и стать по-настоящему эффективными СОМ-программистами. Показывая, почему СОМ для распределенных систем (Distributed СОМ) работает именно так, а не иначе, Дон Бокс дает вам возможность применять эту модель творчески и эффективно для ежедневных задач программирования.

Дональд Бокс

Программирование, программы, базы данных / Программирование / Книги по IT