I. Вычитание
Вычитание указателей на объекты одного и того же типа Разность однотипных указателей – это «расстояние» между двумя участками памяти, адресуемыми указателями, выраженное в единицах кратных длине объекта того типа, который адресуется указателями: type*p1, *p2… // далее указатели получают значения адресов объектов p1 – p2 = ((long) p1 – (long) p2) / sizeof(type) // здесь (long) p – значение указателя Рассмотрим фрагмент программы: …{int a = 1, b = 4, *aa = &a, *bb = &b;
cout << (aa – bb) << '\t' << ((long) aa – (long) bb);} Результат выполнения: 0x18e80ffe 0x18e80ffc - адреса переменной a и переменной b 1 2 - значение разности указателей (1) и разность значений указателей (2). Программа иллюстрирует, что: 1) разница двух указателейна соседние объекты одного типаравна 1 2) разница значений указателей на соседние объекты типа int равна 2 3) адрес первого объявленного объекта больше чем следующего,так как стек заполняется от больших адресов к малым адресам. Вычитание из указателя целое число: При вычитании из указателя целого числа: указатель – K; формируется значение указателя меньшее на величину K*sizeof(type), где K – вычитаемое число, type - тип объекта, к которому относится указатель.
|