Главная Случайная страница



Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника







Указатели и адреса объектов





Как было показано ранее, переменные и константы различных типов данных – это объекты, которые размещаются в памяти компьютера по определенному адресу и, начиная с этого адреса, занимающие в памяти в зависимости от типа определенное количество байт (см. табл. Типов). В языке Си++ определена унарная операция & (получения адреса), которая при применении к конкретному объекту (например, &A) вернет значение адреса, начиная с которого этот объект (А) размещается в памяти компьютера. Адрес любого объекта - это в большинстве случаев беззнаковое 4-х байтовое число, для использования и хранения которого в языке определен специальный тип данных – указатели. Таким образом, значением указателя является адрес объекта в памяти. Поэтому говорят, что указатель, который хранит адрес конкретного объекта, указывает или настроен на этот конкретный объект.

Кроме адреса, указатель должен также хранить информацию о типе объекта, который размещен в памяти, начиная с этого адреса. Это необходимо для того, чтобы при доступе с помощью указателя к объекту, знать сколько байт отведено под этот объект и как данные в этих байтах интерпретировать. Поэтому для сохранения этой информации при определении указателя задаётся его тип и в дальнейшем он может быть настроен только на объект того же самого типа. Таким образом, если в языке Си++ можно определить объект встроенного или определенного пользователем типа данных, то, следовательно, можно определить и указатель такого же типа.

Определить указатель в программе можно c помощью выражения вида:

type * имя_указателя инициализатор;

где type – обозначение типа; имя_указателя – идентификатор указателя, задаётся программистом; инициализатор – не обязательное инициализирующее выражение. Как упоминалось, инициализатор имеет две формы:

type * имя_указателя = инициализирующее_выражение;

type * имя_указателя (инициализатор_выражение);

В качестве инициализирующего выражения должно использоваться константное выражение, частными случаями которого являются:



явно заданный адрес участка памяти;

указатель уже имеющий значение;

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

Пример:

int a = 1, b = 2; /* Определение и инициализация двух переменных a, b типа int */

int * pi1 , *pi2 = &a; /*Определение двух указателей pi1, pi2 типа int*, причем под указатель pi1 выделяется память, но он не инициализируется. Указатель pi2 инициализируется адресом переменной a, т.е. pi2 настроен на переменную а. */

double k , f; //определение двух переменных k и f типа double

double * pd1 = &k, * pd2 = (double*) 0x8D8F0FFA; /*определение и инициализация указателя pd1 и pd2 типа double*; pd1 настраивается на переменную k, а pd2 инициализируется константой 0x8D8F0FFA, причём операция преобразования типа (double*) используется для того, чтобы сообщить компилятору что эта константа не типа long, а адрес в памяти на объект типа double. */

double * pd3 = pd1; /*определен и инициализирован значением указателя pd1, указателя pd3, т.е. pd3, как и pd1, содержит адрес переменной k и теперь на переменную k настроено два указателя.*/

 








Date: 2015-05-22; view: 373; Нарушение авторских прав



mydocx.ru - 2015-2021 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию