Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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 настроено два указателя.*/
|