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

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

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





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

 

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

 

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 оперирует с двумя категориями...

Конституционно-правовые нормы, их особенности и виды Характеристика отрасли права немыслима без уяснения особенностей составляющих ее норм...

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

Значення творчості Г.Сковороди для розвитку української культури Важливий внесок в історію всієї духовної культури українського народу та її барокової літературно-філософської традиції зробив, зокрема, Григорій Савич Сковорода (1722—1794 pp...

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

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

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

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