Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Урок 18. Действия с указателями↑ ⇐ ПредыдущаяСтр 12 из 12 Содержание книги
Поиск на нашем сайте
Доступ к данным по указателю После того как связали переменную и указатель, наша задача - использовать эту связку в своих целях, т.е. получить данные через указатель. Эту операцию делает возможной знакомая звездочка. На самом деле «звездочка» *, присутствующая в записи имени указателя - это оператор косвенного доступа к переменной, то есть через указатель. Примененный к указателю, он выдает значение переменной, на которую данный указатель указывает. int *p; // Объявлен указатель на переменную целого типа Другое название косвенного доступа – операция разыменования. Когда использовать звездочку Как вы могли заметить в предыдущем примере, звездочка перед именем указателя появляется не всегда. То есть, переменную-указатель можно в программе использовать разными способами p = i; Дело в том, что ячейка p может хранить только адрес, или, точнее, данные типа "адрес", а ячейка i - данные целого типа. Налицо несоответствие типов слева и справа от присваивания. *p = 8; совершенно корректно. Нулевой адрес Для указателей, которые не хранят никаких адресов, введена константа «нулевой адрес», с именем NULL. int *p; Эта константа может быть присвоена указателю на переменную любого типа. Нулевой адрес можно использовать чтобы "разорвать связь":
Как использовать указатели Поскольку результатом операции косвенного доступа является значение переменной, на которую указывает указатель, то запись *p (вместе звездочка и имя указателя) можно рассматривать как привычную переменную целого типа и выполнять с ней все арифметические и прочие операции, например: *p = sqrt(*p+2); Механизм указателей очень гибкий, в чем убедимся из дальнейших примеров. Пока что рассмотрим следующий небольшой пример: int a=1; // переменной целого типа присвоена 1 На картинке это выглядит так: Еще один пример демонстрирует связь операций получения адреса и звездочки. Пусть есть описание двух вещественных переменных и указателя на соответствующий тип: float x,y,*ptr; Два оператора присваивания ptr=&x; выполняют то же самое, что и один оператор присваивания y=x. Указатели широко используются программистами-профессионалами. Язык Си позволяет резервировать любой "кусок" памяти (в байтах), возвращая адрес, который можно хранить в указателе. Этот процесс известен как динамическое резервирование памяти. С его помощью программа может использовать всю имеющуюся на компьютере память. Вопросы для самопроверки 1. В каких операциях в программе указатель используется без звездочки и когда со звездочкой?
|
|||||||||||||
Последнее изменение этой страницы: 2016-04-07; просмотров: 571; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.143.23.38 (0.006 с.) |