КАТЕГОРИИ: Архитектура-(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) |
Операції над покажчикамиБагаторівнева непряма адресація
int i = 123 /* де: i - ім'я змінної */ int *pi = &i; /* pi - покажчик на змінну і */ int **ppi = π /* ppi - покажчик на покажчик на змінну pi */ int ***pppi = &ppi; /* pppi - покажчик на 'покажчик на 'покажчик на змінну ppi' */
Мова Сі надає можливості для виконання над покажчиками операцій присвоювання, цілочисельної арифметики та порівнянь. Мовою Сі можливо: - присвоїти покажчику значення адреси даних, або нуль; - збільшити (зменшити) значення покажчика; - додати або відняти від значення покажчика ціле число; - скласти або відняти значення одного покажчика від іншого; - порівняти два покажчики за допомогою операцій відношення. Усі названі дії над покажчиками будуть наведені у прикладах програм даного розділу. Розглянемо кілька простих прикладів дій над покажчиками. Зміну значень покажчика можна робити за допомогою операцій: +, ++, -, --. Бінарні операції (+ та -) можна виконувати над покажчиками, якщо обидва покажчики посилаються на змінні одного типу, тому що об'єм ОП для різних типів даних може вирізнятися. Наприклад, значення типу int займає 2 байти, а типу float - 4 байти. Додавання одиниці до покажчика додасть "квант пам'яті", тобто кількість байтів, що займає одне значення типу, що адресується. Для покажчика на елементи масиву це означає, що здійснюється перехід до адреси наступного елемента масиву, а не до наступного байта. Тобто значення покажчика при переході від елемента до елемента масиву цілих значень буде збільшуватися на 2, а типу float - на 4 байти. Результат обчислення покажчиків визначений у мові Сі як значення типу int. Приклад програми зміни значення покажчика на 1 квант пам'яті за допомогою операції "++" і визначення результату обчислення покажчиків даний на такому прикладі: #include<stdio.h> int *ptr1, *ptr2; ptr1=a; /*- ptrl одержує значення адреси а[0] */ ptr2 = &a[2]; /*- ptr2 одержує значення адреси а[2] */ ptr2++; /* збільшення значення ptr2 на квант ОП: ptr2 = &а[3]*/ printf ("\n\n\t ptr2 - ptr1 = %d\n", ptr2 - ptr1);
printf ("\n\t Елемент а[0]=%d\n", *ptr1); ptr1++; printf ("\n\t Елемент а[1]=%d\n", *ptr1); ptr1++; printf ("\n\t Елемент а[2]=%d\n", *ptr1); ptr1++; printf ("\n\t!Елемент а[3]=%d\n", *ptr1); } Результат виконання програми:
Дата добавления: 2014-01-04; Просмотров: 1319; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |