Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Либерти Джесс. Освой самостоятельно С++ за 21 день. - royallib.ru.rtf
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
2.55 Mб
Скачать

Использование адреса, хранящегося в указателе

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

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

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

2:

3: #include <iostream.h>

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