Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Если p ~ указатель на объект то p есть сам объект

Работа добавлена на сайт samzan.net: 2015-07-05

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 19.5.2024

Указатель есть адрес некоторого объекта. Если p  указатель на объект, то *p есть сам объект. Адрес объекта возвращает оператор &, который ставится перед именем объекта.

  1.  Указатели
    1.  Указатели и адреса

В языке C++ можно определять переменные, значениями которых являются адреса других переменных. Такие переменные называются указателями. Для объявления указателя после имени типа ставится *, например,

int *pi; //pi – указатель на переменную целого типа

Существует унарный оператор &, выдающий адрес своего операнда. После выполнения инструкций

int i = 0;

pi = &i;

указатель pi будет содержать адрес переменной i (говорят, что pi ссылается на i). Схема расположения в памяти переменной i и указателя pi, содержащего ее адрес, показана на рис.. Целая переменная i занимает два байта памяти, а указатель pi – четыре. Такое количество памяти выделяется под указатели на так называемых 32 –разрядных компьютерах, в которых для формирования адресов используется 4 байта, состоящих из 8 двоичных разрядов – битов.

Рис.. Связь объекта и указателя на него

Унарный оператор * применяется к указателю и выдает объект, на который ссылается данный указатель, например,

*pi = 2; //Теперь i = 2

Иначе говоря, если pi указывает на i, то выражение *pi и i – это одно и то же.

Можно создавать указатели на величины любых типов.

Взаимодействие формальных параметров и фактических аргументов функции triangle иллюстрируется рис.. При вызове функции формальные параметры a, b, c получают значения фактических аргументов r, s, t; формальные параметры p_perim, p_area получают значения адресов внешних переменных P и S.

Рис.. Формальные параметры a, b, c получают значения внешних переменных r, s, t. Формальные параметры p_perim и p_area получают значения адресов внешних переменных P и S

  1.  Указатели и массивы

Определение

int a[10];

создает массив из 10 элементов, то есть блок из 10 расположенных последовательно объектов с именами a[0], a[1], …, a[9].

Рис.. Массива в памяти и указатели на элементы массива

Пусть определен указатель

int *pa;

После присваивания pa = &a[0] указатель pa будет содержать адрес первого элемента массива a. На рис. это показано стрелкой, причем для pa нарисован прямоугольник, чтобы подчеркнуть, что этот указатель размещен где-то в памяти.

По определению pa+1 указывает на следующий элемент массива, pa+i указывает на i-й элемент после pa, pa-i указывает на i-й элемент перед pa. Для выражений pa+1, pa+2 на рисунке прямоугольники не нарисованы, так как под них память не выделяется. Имея указатель на начало массива, можно получить доступ к любому его элементу, например, *pa есть нулевой элемент массива, *(pa+1) – первый и т.д. Присваивание

*(pa+1)= 0; 

зануляет первый элемент массива.

По определению значение переменной или выражения типа массив есть адрес нулевого элемента массива, поэтому имя массива имеет тип указателя на элемент массива, например, a имеет тип int*. Доступ к i-му элементу массива можно получить, используя индексацию a[i] или выражение *(a+i).

Указатель это переменная, которой можно присваивать различные значения, например, pa=a+1. Теперь pa указывает на первый элемент массива a. Имя массива не является переменной, так как содержит адрес конкретного участка памяти, и записи типа a=pa, a++ недопустимы. Значение имени массива изменить нельзя, во всем остальном имя массива подобно указателю.

  1.  Адресная арифметика

Как уже говорилось, указатели можно складывать и вычитать с целыми. Если p – указатель на некоторый элемент массива, то выражение p++ изменяет p так, чтобы он указывал на следующий элемент массива. Выражение p+=i изменяет p так, чтобы он указывал на i-й элемент, после того, на который он указывал ранее.

Если p и q указывают на элементы одного и того же массива, то к ним можно применять операторы сравнения ==, !=, <, <=, >, >=. Выражение p < q истинно, если p указывает на более ранний элемент массива, чем q.

Любой указатель можно сравнивать на равенство и неравенство с нулем. Если значение указателя равно нулю, это трактуется так, что указатель никуда не указывает.

Допускается вычитание указателей. Если p и q указывают на элементы одного и того же массива и p < q, то q - p +1 есть число элементов от p до q включительно.

  1.  Символьные указатели

Для работы со строками символов часто используются указатели на char. Их определение имеет вид:

char* pc;

Строковая константа, написанная в виде “Я строка” есть массив символов. Во внутреннем представлении этот массив заканчивается нулевым символом ‘\0’, по которому программа может найти конец строки. Адрес начала массива, в котором расположена строковая константа, можно присвоить указателю путем присваивания

pc = ”Я строка”;

Здесь копируется только адрес начала строки, сами символы не копируются. Указатель на строку можно использовать там, где требуются строки. Например, при выполнении следующей строки программы

cout << pc << длиной ” << strlen(pc) << символов”;

будет напечатано

Я строка длиной 8 символов

При подсчете символов строки учитываются и пробелы, а завершающий символ ’\0’ не учитывается.

  1.  Массивы указателей

Указатели, как и любые другие переменные, можно группировать в массивы. Удобно, например, использовать массив символьных указателей при работе с несколькими строками, которые могут иметь различную длину.


pi

ii

···

··

r

s

t

P

S

main

 a

 b

 c

 p_perim

 p_area

triangle

a:

a[0]

a[1]

a[9]

pa

pa+1

pa+2




1. Клаус Ежишек Сильвестр
2. рефератов для электива Проблемы переходной экономики Актуальные экономические проблемы
3. Образ Эдипа у Софокла
4. БІОСИГНАЛИ МОЗКУ
5. На тему- Закриті механічні пошкодження.html
6. Основные направления исследований в области МРР на современном этапе
7. Тема 2 ПРОЦЕССНАЯ РЕОРГАНИЗАЦИЯ ПРЕДПРИЯТИЯ Лекция 2
8. Режим и безопасность содержания заключенных в тюрьмах
9. это основанная на праве и законности организация общественной жизни отражающая качественное состояние общ
10. .Вид деятельности для удовлетворения собственных нужд на земельном участке расположенном в сельской мес
11. Основные направления совершенствования качества социального образования
12. Лабораторная работа 1 Теоретические сведения
13. 200 г Научный руководитель- Исполнитель- Павлова Е
14. Диагностика и лечение нефроптоза
15. Традиційна народна медицина гуцулів Рахівщини XIX початку XX ст
16. Управление дебиторской задолженностью на материалах ООО Торговый дом Ресурс Поволжье
17. I Психологические основы формирования самооценки и коммуникативных умений в младшем школьном возрасте
18. Радянський військово морський флот в роки Другої світової війни
19. Крушовице Мистическая Прага Вена Дрезден замок Наход супермаркет DBL TRPL 2
20. 1 Сущность понятие секретаряреферента 4 1