Скачать 0.64 Mb.
|
УказателиВо всех рассмотренных нами программах использовалось статическое распределение памяти: переменные объявлялись так, что компилятор резервировал для каждой из них некоторое количество памяти (в соответствии с типом данных) еще на этапе компиляции. Язык C++ включает в себя мощные средства для работы с оперативной памятью: динамическое выделение и освобождение памяти, доступ к отдельным ячейкам памяти по их адресам, механизм указателей, который позволяет работать с динамическими структурами данных, размер которых не известен на этапе компиляции и может меняться во время выполнения программы. Указатель представляет собой адрес переменной в оперативной памяти. Переменная указательного типа (переменная-указатель или просто указатель) – это переменная, размер которой достаточен для хранения адреса оперативной памяти. Объявление указателейПеременные-указатели объявляются с помощью символа *, который добавляется после названия обычного типа данных (или перед именем переменной-указателя). Например, описание: int* a; объявляет переменную-указатель a, которая может принимать значение адреса переменной целого типа int. Здесь int является базовым типом для переменной-указателя a. Несколько указателей одного типа можно объявить так: int *a, *b, *c; Однако если в программе используется много указателей одного типа, целесообразно определить новый тип: typedef int* ref_int; ref_int a, b, c; Здесь объявлен указательный тип ref_int и три переменные a, b, c этого типа. Операции над указателямиС указателями можно использовать 4 арифметические операции: +, -, ++ и --, т.е. 2 бинарные (сложения и вычитания) и 2 унарные (инкремент и декремент), а также операции отношения: ==, < и >. При этом важно иметь в виду, что арифметические операции над указателями выполняются по особым правилам. Поскольку значение указателя представляет собой адрес переменной некоторого типа, при выполнении арифметических операций происходит изменение (смещение) адреса на величину кратную длине соответствующего базового типа. Так, если переменная-указатель описана как short *a, и в процессе выполнения программы переменная a приняла значение 1600 (адрес памяти), то после выполнения инкремента a++ она примет значение 1602, т.е. адрес увеличится на величину, равную длине памяти, занимаемой базовым типом short. Иначе говоря, произойдет смещение указателя на адрес, расположенный непосредственно за значением переменной, на которую указывает a. К переменной-указателю можно прибавлять (или вычитать) целое число. При этом происходит смещение указателя на соответствующее базовому типу число адресов памяти. При выполнении операций отношения необходимо учитывать, что допускается только сравнение указателей, имеющих один и тот же базовый тип. Для получения значения переменной по ее указателю используется унарная операция разыменования (разадресации) *. Выражение *<переменная-указатель> представляет собой переменную (значение переменной), адрес которой равен значению переменной-указателя. По существу операция разыменования является обратной рассмотренной ранее операции взятия адреса &. Таким образом, операция * означает «получить значение переменной, расположенной по этому адресу», а операция & – «получить адрес этой переменной». Отсюда, например, следует, что выражение *&*&*&a принимает значение переменной a. Операция разыменования позволяет использовать указатели в выражениях базового для указателя типа и в операторе присваивания. Пример: include void main() { int a=5, b=8; int *m, *n; m=&a; n=&b; *m+=5; *n=*m+b; cout <<”\na= < } В результате выполнения этой программы на экран будет выведено: a=10 b=18. Можно считать, что в программе для переменной a использовалось два имени: a и *m, а для переменной b: b и *n. Следует заметить, что операции * и & имеют более высокий приоритет, чем любая из арифметических операций, кроме унарного минуса, приоритет которой такой же, как у этих двух операций. |
Программа по формированию навыков безопасного поведения на дорогах... Мама купила 6 шаров красного и голубого цвета. Красных было больше, чем голубых. Сколько шаров каждого цвета могло быть? (2варианта... | С. П. Филин Концепции современного естествознания: конспект лекций Конспект лекций соответствует требованиям Государственного образовательного стандарта высшего профессионального образования РФ и... | ||
Конспект лекций раскрывает содержание и структуру учебной дисциплины... Налоговое право : конспект лекций / сост доцент Р. В. Бобринев; Кузбасский институт экономики и права. – Кемерово, 2011 – 144 с | «программирование» Рабочая программа дисциплины «Программирование» /сост. Хатаева Р. С.– Грозный: чгпи, 2011г | ||
Конспект лекций по философии Часть 1 Античная философия Новосибирск... Савостьянов А. Н. Конспект лекций по философии / Новосиб гос ун-т. Новосибирск, 2007. Ч. Античная философия. 68 с | Конспект лекций по курсу хозяйственного права тема Понятие хозяйственного права Кафедра Истории, социологии и права Назаров Андрей Александрович конспект лекций по курсу хозяйственного права | ||
Конспект лекций по высшей математике. В 2 частях. Часть М.: Айрис-пресс,... Баранова Е. С., Васильева Н. В., Федотов В. Л. Практическое пособие по высшей математике. Типовые расчеты. Учебное пособие. — Спб:... | Опорный конспект лекций Основные понятия, термины, законы, схемы... Л. Н. Блинов, Н. Н. Ролле. Экология: опорный конспект лекций. Основные понятия, термины, законы, схемы. Спб.: Изд. Спбгпу. 2005.... | ||
Н. Д. Серова структурное подразделение детский сад Конспект Универсальные учебные действия: 1 формирование основ социально ценных личностных и нравственных качеств: уважение и вежливое отношение... | 12 Достижения компьютерной техники 15 Программирование Программирование 3 | ||
Конспект урока л. Н. Андреев «Кусака». Сострадание и бессердечие... «моу шалакушская средняя школа» структурное подразделение «Шожемская основная школа» | Конспект лекций Владимира Климентьева по истории философии, отредактированный... Рекомендовано Министерством общего и профессионального образования Российской федерации в качестве учебника для студентов высших... | ||
Теория организации Конспект лекций для студентов специальности «Менеджмент организации» Макарова н. Н. Теория организации. Конспект лекций с практическими заданиями для студентов специальности "Менеджмент организации.... | Еленевский А. Г., Соловьева М. П., Тихомиров В. Н. Ботаника высших или наземных растений Он является обязательным для студентов 2 курса очной и заочной форм обучения на биолого-химическом факультете и рассчитан на очном... | ||
Фгбоу впо «агту» Обособленное структурное подразделение «Волго-Каспийский... Полное наименование: Обособленное структурное подразделение «Волго-Каспийский морской рыбопромышленный колледж» федерального государственного... | Письменный Д. Т. Конспект лекций по теории вероятностей, математической... Письменный Д. Т. Конспект лекций по теории вероятностей, математической статистике и случайным процессам. 3-е изд. М.: Айрис-пресс,... |