ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 10) онлайн
Переменные указатели
Адресное пространство ограничено. Возможность узнать, где расположены в па- мяти переменные, полезна (мы делали это в программе VARADDR), а видеть само значение адреса нам нужно не всегда. Потенциальное увеличение наших возмож- ностей в программировании требует реализации следующей идеи: нам необходи- мы переменные, хранящие значение адреса. Нам знакомы переменные, хранящие
знаки, числа с плавающей точкой, целые и т. д. Адреса хранятся точно так же. Переменная, содержащая в себе значение адреса, называется переменной-указа- телем или просто указателем.
Какого же типа может быть переменная-указатель? Она не того же типа, что и переменная, адрес которой мы храним: указатель на int не имеет типа int. Воз- можно, вы думаете, что указатели принадлежат некоторому типу pointer или ptr. Однако здесь все немного сложнее. В программе PTRVAR показан синтаксис пе- ременных-указателей.
// ptrvar.cpp
// указатели (адреса переменных)
#include <iostream>
using namespace std;
int main ( )
{
int var1 = 11; // две переменные
int var2 = 22;
cout << &var1 << endl // покажем адреса переменных
<< &var2 << endl << endl;
int* ptr; // это переменная-указатель на целое
ptr = &var1; // присвоим ей значение адреса var1
cout << ptr << endl; // и покажем на экране
ptr = &var2; // теперь значение адреса var2
cout << ptr << endl; // и покажем на экране
return 0;
}
В этой программе определены две целочисленных переменных var1 и var2, которые инициализированы значениями 11 и 22. Затем программа выводит на дисплей их адреса.
Далее в программе определена переменная-указатель в строке
int* ptr;
Для непосвященных это достаточно странный синтаксис. Звездочка означает указатель на. Таким образом, в этой строке определена переменная ptr как ука- затель на int, то есть эта переменная может содержать в себе адрес переменной типа int.
Почему же идея создания типа pointer, который бы включал в себя указатели на данные любого типа, оказалась неудачной? Если бы этот тип существовал, то мы могли бы записать объявление переменной этого типа как:
pointer ptr;
Проблема в том, что компилятору нужны сведения о том, какого именно типа переменная, на которую указывает указатель (мы поймем почему, когда будем рассматривать указатели и массивы). Синтаксис, используемый в C++, позволяет нам объявить указатель следующим образом:
char* cptr; // указатель на символьную переменную
int* iptr; // указатель на целую переменную
float* fptr; // указатель на вещественную переменную
Distance* distptr; // указатель на переменную класса Distance
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
Схожі підручники
- Економічні функції держави в перехідній економіці
- Розділ ІІ (ЗМ 2) Господарство та економічна думка суспільства Європейської цивілізації в період середньовіччя (кінець V – ХV ст.)
- psy_personal (онлайн)
- Світовий ринок послуг онлайн (частина 1)
- РЕГІОНАЛЬНА ЕКОНОМІКА (частина 3)
- МЕТОДИЧНІ ВКАЗІВКИ до виконання розрахункової роботи з навчальної дисципліни “Економіко-математичні методи та моделі оптимізаційні методи та моделі”
