русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Операции над указателями


Дата добавления: 2013-12-23; просмотров: 696; Нарушение авторских прав


J = i;

J = *ptr;

J = *ptr;

X = 3.1416;

I = 5;

c = ‘@’;

Обратимся к ним по адресу:

y = *ukaz;

d = *adr;

Содержимое ячейки памяти с адресом ptr (а там записано число 5 – ведь это адрес переменной i) будет присвоено переменной j, содержимое ячейки памяти с адресом ukaz – переменной y, содержимое ячейки памяти с адресом adr – переменной d.

Таким образом, два оператора присваивания:

ptr = &i;

выполняют то же самое, что и один оператор:

Значит, можно организовать не только прямую передачу данных от одной переменной к другой (j = i), но и косвенную – через адреса переменных, даже не упоминая их имен. Указатели позволяют обращаться к конкретным ячейкам памяти и изменять их содержимое, не интересуясь тем, значения каких именно переменных хранятся в этих ячейках:

*adr = ‘+’;

переменой по адресу adr присвоено значение символа ‘+’,

(*ptr)++;

значение переменной по адресу ptr увеличивается на единицу,

(*ptr) += 3;

значение переменной по адресу ptr увеличивается на 3,

j = (*ptr)++;

значение переменной по адресу ptr присваивается переменной j и после этого увеличивается на единицу.

Если это выражение записать без скобок:

j = *ptr++;

то сначала значение адреса ptr увеличивается на единицу (получаем адрес следующей ячейки памяти), а затем содержимое новой ячейки памяти присваивается переменной j : операции доступа по адресу * и инкремента ++ имеют одинаковый приоритет, но выполняются справа налево.

 

Помимо операций доступа по адресу * и получения адреса & , над указателями определены следующие операции:

- сложение с константой,

- вычитание,

- инкремент,

- декремент,

- операции отношений.

Операция доступа по адресу* предназначена для доступа к величине, адрес которой хранится в указателе. Эту операцию можно использовать как для получения, так и для изменения значения величины (если она не объявлена как константа):



char a; // a - переменная типа char

char *ptr; // выделение памяти под указатель ptr

*ptr = ‘@’; // по адресу ptr записано значение @

a = *ptr; // переменной а присвоено значение,
// записанное по адресу ptr

Как видно из примера, конструкцию *указатель можно использовать в левой части оператора присваивания, так как она определяет адрес области памяти. Эту конструкцию можно считать именем переменной, на которую ссылается указатель. С ней допустимы все действия, определенные для величин соответствующего типа.

Арифметические операции с указателями (сложение с константой, вычитание, инкремент и декремент) автоматически учитывают размер типа величин, адресуемых указателями. Эти операции применимы только к указателям одного типа и имеют смысл в основном при работе со структурами данных, последовательно размещенными в памяти, например, с массивами.

Инкремент++ перемещает указатель к следующему элементу массива, декремент- к предыдущему. Если указатель на определенный тип увеличивается или уменьшается на константу, то его значение изменяется на величину этой константы, умноженной на размер объекта данного типа. Эта операция производится автоматически.

Разность двух указателей – это расстояние между двумя областями памяти, определяемое в единицах, кратных размеру (в байтах) объекта того типа, к которому отнесены эти указатели. Таким образом, разность указателей, адресующих два смежных объекта одинакового типа, по абсолютной величине всегда равна единице.

Внимание! Суммирование двух указателей недопустимо!

Указатели редко используются с простыми данными вроде отдельных переменных. Преимущества указателей наглядно проявляются при использовании их вместе с массивами, функциями и строками.

 



<== предыдущая лекция | следующая лекция ==>
Адреса и указатели | Указатели и массивы


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.003 сек.