Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Понятие указателя. Инициализация указателей.Содержание книги
Поиск на нашем сайте
22. Указательные переменные. Операции получения адреса (&) и раскрытия ссылки(*). Указательные переменные Указатель – это переменная, которая содержит адрес некоторого объекта.Указатели чаще всего используются при работе с динамической памятью. Доступ к выделенным участкам динамической памяти, называемых динамическими переменными, производится только через указатель. Время жизни динамических переменных – от точки создания до конца программы или до явного освобождения памяти.В С различают 3 вида указателей:– указатели на объект;– указатели на функцию;– указатели на void, отличающиеся свойствами и набором допустимых операций.Указатель на функцию содержит адрес в сегменте кода, адрес, по которому передается управление при вызове функции. Они используются для косвенного вызова функции (не через ее имя, а через обращение переменной, хранящей ее адрес), а также для передачи имени функции в другую функцию в качестве параметра. тип(*имя)(список типов аргументов); Пример: int (*fun)(double, double); задает указатель с именем fun на функцию, возвращающую значение типа int и имеющую 2 аргумента типа double.Указатель на объект содержит адрес области памяти, в которой хранятся данные определенного типа.тип *имя;В этом объявлении тип – некоторый тип языка С, определяющий тип объекта, на который указывает указатель (адрес которого содержит). * – следующая за ней переменная является указателем. Она относится непосредственно к имени, поэтому для того, чтобы объявить несколько указателей, требуется вставить ее перед именем каждого из них.Пример: int *a, b, *c;Описываются 2 указателя на целое с именами а и с, а также целая переменная b.Указатель на void применяется в тех случаях, когда конкретный тип объекта, адрес которого требуется хранить, неопределен (например, если в одной и той же переменной в разные моменты времени требуется хранить адреса объектов различных типов). Однако для того, чтобы можно было выполнить арифметические и логические операции над указателями или над объектами, на которые они указывают, необходимо при выполнении каждой операции явно определить тип объекта. Такие определения типов могут быть выполнены с помощью операции приведения типов. Указателю на void можно присвоить указатель любого другого типа. Однако при обратном присваивании необходимо использовать явные преобразования указателя на void.Пример: … void *p1; // объявление указателя на тип void float f, *p2; // объявление указателя на тип float (p2) и переменной того же типа (f) p2 = &f; // указатель p2 теперь указывает на f (они имеют один и тот же адрес) p1 = p2; // присваивание указателю void указателя типа float p2 = (float *)p1; /* обратное присваивание: указателю p2 присваивается указатель p1, предварительно преобразовав p1 к типу float */ Операции получения адреса (&) и раскрытия ссылки (*) С указателями связаны 2 специальные операции: & и *. Обе эти операции являются унарными, т.е. имеют один операнд, перед которыи они ставятся.Операция & соответствует операции "взять адрес"; операция * соответствует словам "значение, расположенное по указанному адресу".В объявлении переменной, являющейся указателем, очень важен базовый тип. Компилятор знает, сколько байт памяти занимает переменная, на которую указывает данный указатель из базового типа указателей. Если указатель имеет базовый тип int, то переменная занимает 2 байта, char – 1 байт и т.д.Пример: // работа с указателями { float x = 10.1, y; // объявление с инициализацией x и y float *point; // объявление указателя point на тип float point = &x; // применение операции взятия адреса; теперь указатель point указывает на x y = *point; /* применение операции взятия значения, расположенному по адресу, на который указывает point; теперь y содержит значение x (т.к. point указывал на x */ printf ("x = %d", x, "y = %d", y); // вывод значения x и y (они одинаковы) ++ *point; /* увеличение на единицу значения, расположенного по адресу, на который указывает указатель point */ printf ("\n x = %d", x, "y = %d", y); /* теперь значение x увеличено на единицу, а y – без изменения */ y = 1+ *point*y; // сумма единицы и значения указателя point * на значение переменной y printf("\n x = %d", x, "y = %d", y); // вывод значений x и y getch(); }
|
||||
Последнее изменение этой страницы: 2021-08-16; просмотров: 72; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.185.202 (0.007 с.) |