Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Понятие указателя




Указатели

Поиск в отсортированном массиве

В отсортированном массиве используется дихотомический (бинарный) поиск.

Массив делится пополам S:=(L+R)/2+1 и определяется, в какой части массива находится нужный элемент Х. Т.к. массив упорядочен, то если a[S] < X, то искомый элемент находится в правой части массива, иначе – находится в левой части. Выбранную часть массива снова надо разделить пополам и т.д., до тех пор, пока границы отрезка L и R не станут равны [11].

 

Пример 46

int b;

cout<<”\nX=?”;

cin>>x; // ввод искомого элемента

int l=0, r=n-1, s;

do

{

s=(l+r)/2; //средний элемент

if(a[s]<x) l=s+1; //перенести левую границу

else r=s; //перенести правую границу

}

while(l!=r);

if(a[l]==x) return l;

else return -1

При объявлении указателя на объект данных перед его именем ставится символ *, являющийся признаком косвенной адресации, а перед символом * задаётся тип косвенно адресуемого объекта:

 

type *pointer;

 

Здесь через pointer обозначено имя переменной – указателя, которое подчиняется тем же правилам именования, что и для обычных переменных.

Тип может быть любым, кроме ссылки.

 

При объявлении переменной – указателя на функцию имя указателя вместе с предшествующим символом * заключается в круглые скобки, вне которых задаётся профиль косвенно адресуемых функций:

 

type (*pointer)(список аргументов с их типами);

 

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

 

Замечание. С точки зрения синтаксиса языка безразлично, где будет находиться пробел – справа или слева от символа *. Его вообще может не быть.

Пример 47

 

char *p; // указатель на символ

int *q; // указатель на целое

int *ip = &ia[2]; // указателю на целое присвоен адрес третьего

// элемента массива ia

int **t; // указатель на указатель на целую переменную

char *pa[7]; // массив из 7 указателей на символы

double (*fp)(double); // указатель на функцию, аргументом

// которой является число типа double, и

// которая возвращает результат типа double

 

 

Перед использованием в программе указатель должен содержать адрес объекта требуемого типа. Перед присваиванием указателю адрес переменной, элемента массива, функции или другого объекта может быть получен с помощью оператора взятия адреса &. Например:

 

p = &v[3]; //указатель содержит адрес 4-го элемента массива v

q = &inch; //указатель содержит адрес переменной inch

fp = &sqrt; //указатель содержит адрес функции sqrt()

 

Для инициализации указателя существуют следующие способы (рис. 20):

Присваивание адреса существующего объекта:

1) с помощью операции получения адреса

int a=5;

int *p=&a; или int p(&a);

2) с помощью проинициализированного указателя

int *r=p;

 

Рис. 20. Инициализация указателя

3) адрес присваивается в явном виде

char *cp=(char*)0х В800 0000;

где 0х В800 0000 – шестнадцатеричная константа, (char*) – операция приведения типа.

4) присваивание пустого значения:

int *N=NULL;

int *R=0;




Поделиться с друзьями:


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


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



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




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