Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Арифметические операции с указателями

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

Инкремент перемещает указатель к следующему элементу массива, декремент – к предыдущему.

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

К указателям можно прибавлять целое число. Пусть указатель р имеет значение 2000 и указывает на тип byte. Тогда в ре­зультате выполнения оператора:

p=p+3;

значение указателя р будет 2003. Если же указатель р1=2000 был бы указа­телем па float, то после применения оператора:

р1=р1+10;

значение р1 было бы 2040.

Общая формула для вычисления значения указателя после выполнения операции:

р=р+n;

будет иметь вид:

<р>=<р>+n*<количество байт памяти базового типа указателя >

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

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

Другие арифметические операции над указателями запрещены, напри­мер нельзя сложить два указателя, умножить указатель на число и т. д.

Указатели можно сравнивать. Применимы все шесть операций:

<,>,<=, >=, =,= =,!=

Сравнение р<g означает, что адрес, находящийся в р, меньше адреса, находящегося в g. Если р и g указывают на элементы одного массива, то индекс элемента, на который указывает р, меньше индекса массива, на который указывает g.

Пример применения арифметических операций с указателями:

//демонстрация операции инкремента

int * p;

int a = 5;

p = &a;

Console.WriteLine("{0:X}",(uint)p);// вывод значения указателя(адреса), //тип uint-беззнаковый целый тип в unicode-формате(16-ное число)

p++;//операция инкремента. Значение указателя(адрес) увеличивается на 4 //байта

Console.Write("{0:X}", (uint)p);

// аналогичные действия, только применимые для типа long:

long *p1;

p1++;//значение указателя(адрес) увеличится на 8 байт!

//демонстрация операции разности указателей

int []a=new int[]{1,2,3};

fixed (int* p1 = a)

{

int* p2 = p1;

p2 ++;

Console.WriteLine(p2-p1);

}

//демонстрация операции сложения указателя с целым числом

int *p3=p2+2; // к указателю прибавили 2 элемента!

Console.WriteLine(*p3);//значение по указателю равно 3

<== предыдущая лекция | следующая лекция ==>
Операции с указателями. Инициализация указателей | Указатель на указатель
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 451; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




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