Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Операции с указателями. Как уже говорилось выше, указатели допускают несколько видов операций над ними





Как уже говорилось выше, указатели допускают несколько видов операций над ними. В частности разность двух указателей есть число, а указатель плюс число есть опять указатель.

 

Разберемся поподробнее.

 

char c1 = ‘h’;

char c2 = ‘e’;

char c3 = ‘l’;

char c4 = ‘l’;

char c5 = ‘o’;

char c6 = 0;

// чертов C++ позволяет вот так символ рассматривать как число от

// 0 до 255 и оперировать с ним как с числом

char *ptr = &c1;

char *nptr;

// *ptr => ‘h’

 

В результате, в памяти будет следующая последовательность байтов:

 

значение ?             номер 1 ?
номер                              
переменная не занято c1 c2 c3 c4 c5 c6 ptr nptr
тип char char char char char char указатель на char указатель на char
значение ‘h’ ‘e’ ‘l’ ‘l’ ‘o’   адрес перем. c1 не определено
                               

 

Теперь прибавим к первому указателю 4 и запишем результат во второй указатель:

 

nptr = ptr+4;

// *nptr => ‘o’

 

То есть второй указатель теперь указывает на последний из символов. Также справедливо следующее:

 

// nptr-ptr => 4;

// *(ptr+1) => ‘e’

// *(ptr+2) => ‘l’

// *(ptr+3) => ‘l’

// *(ptr+4) => ‘o’

// *(ptr+5) => 0

 

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

 

Если к указателю ptr прибавить число i, то в результате получится адрес, смещенный не на i байтов, а на i*sizeof(type) байтов, где type – это тип переменной, на которую указывает указатель. То есть отсчет идет не в байтах, а как бы в единицах того типа, на который указывает указатель. Если ptr есть указатель на char, то так как char занимает в памяти один байт, ptr+1 указывает на область памяти, отстоящую от ptr действительно на 1 байт. А если ptr есть указатель на int, то ptr+1 указывает на область памяти, отстоящую от ptr на два байта, потому что переменная типа int занимает в памяти 2 байта.

Аналогично, разность ptr2-ptr1 даст не количество байтов между областями памяти, на которые указывают ptr1 и ptr2, а количество переменных, которые могут «уместиться» в памяти между ptr1 и ptr2. Причем переменных именно того типа, указателями на который ptr1 и ptr2 являются.

 







Дата добавления: 2015-08-12; просмотров: 309. Нарушение авторских прав; Мы поможем в написании вашей работы!




Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...


Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...


Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...


ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

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

Сущность, виды и функции маркетинга персонала Перснал-маркетинг является новым понятием. В мировой практике маркетинга и управления персоналом он выделился в отдельное направление лишь в начале 90-х гг.XX века...

Разработка товарной и ценовой стратегии фирмы на российском рынке хлебопродуктов В начале 1994 г. английская фирма МОНО совместно с бельгийской ПЮРАТОС приняла решение о начале совместного проекта на российском рынке. Эти фирмы ведут деятельность в сопредельных сферах производства хлебопродуктов. МОНО – крупнейший в Великобритании...

Седалищно-прямокишечная ямка Седалищно-прямокишечная (анальная) ямка, fossa ischiorectalis (ischioanalis) – это парное углубление в области промежности, находящееся по бокам от конечного отдела прямой кишки и седалищных бугров, заполненное жировой клетчаткой, сосудами, нервами и...

Основные структурные физиотерапевтические подразделения Физиотерапевтическое подразделение является одним из структурных подразделений лечебно-профилактического учреждения, которое предназначено для оказания физиотерапевтической помощи...

Почему важны муниципальные выборы? Туристическая фирма оставляет за собой право, в случае причин непреодолимого характера, вносить некоторые изменения в программу тура без уменьшения общего объема и качества услуг, в том числе предоставлять замену отеля на равнозначный...

Studopedia.info - Студопедия - 2014-2025 год . (0.012 сек.) русская версия | украинская версия