15292

Використання адресної арифметики для роботи з вказівниками

Лабораторная работа

Информатика, кибернетика и программирование

Використання адресної арифметики для роботи з вказівниками Лабораторна робота Тема: Використання адресної арифметики для роботи з вказівниками Мета роботи: Навчитись створювати вказівники описувати їх і задавати; оволодіти основними с

Украинкский

2013-06-11

62 KB

8 чел.

PAGE  2

Використання адресної арифметики для роботи з вказівниками

Лабораторна робота

Тема: Використання адресної арифметики для роботи з вказівниками

Мета роботи: Навчитись створювати вказівники, описувати їх і задавати; оволодіти основними способами роботи з вказівниками в C-програмах,. Визначення адресів елементів масиву з використанням адресної арифметики.

  1.  Короткі теоретичні відомості

Вказівники і масиви. Вказівники і масиви тісно пов’язані. Ім’я масиву без квадратних дужок є вказівником на перший елемент масиву.  Якщо а ім’я масиву, то а – це адреса першого елементу масиву, тобто еквівалентне співвідношення.

&a[0] = = a

Ім’я масиву є постійним вказівником (адресною константою) його не можна змінити і воно (ім’я) є фіксованим протягом виконання програми.

Розміщення елементів масиву в пам’яті.  Елементи масиву розміщаються в пам’яті послідовно один за одним, причому перший елемент розміщається по наймолодшій адресі.

На рис 7 показано співвідношення між адресами розміщених в пам’яті значень для масивів типу short (2 байти) з 6-ти елементів і масиву типу   float (4 байти) з трьох елементів.

short x[6]

float y[3]

Тоді

х= = 1000

&x[0]= =1000

&x[1]= =1002

y= =1250

&y[0]= = 1250

&y[1]= = 1254

Символ х без квадратних дужок і індексу – це адрес першого елемента масиву x[0] і = 1000. Адрес другого елементу масиву  = 1002. В масиві типу float різниця між адресами сусідніх елементів = 4 байти.

При зверненні до елементів масиву з допомогою вказівників, вказівник треба збільшувати на два для перебору елементів типу short і на 4 для перебору елементів типу float.

Операція для визначення кількості байтів змінної даного типу sizeof . Це ключове слово, яке означає одномісну операцію.

sizeof(int) =4

sizeof(short) =2

sizeof(float) =4

sizeof(char) =1

sizeof(double) =8

Адресна арифметика. Щоб звернутися до будь-якого елементу масиву, вказівник має одержати приріст., кратний розміру елементів масиву. Для цього використовується адресна арифметика.

Інкрементування вказівників. Інкрементувати вказівник – це значить збільшити його значення. Якщо значення вказівника інкрементувати на одиницю, то адресна арифметика автоматично адресу, яку він зберігає, так, щоб він вказував на наступний елемент масиву. Іншими словами, компілятор знає тип вказівника (з його опису) і збільшує збережувану в ньому адресу на довжину елемента даних.

Приклад.

Якщо ptr_to_short є вказівником на якийсь елемент масиву типу short , то оператор

ptr_to_short ++;

збільшує значення ptr_to_short на довжину типу short (2 байти) і вказівник буде вказувати на наступний елемент масиву.

Якщо додати до вказівника число , наприклад 4

 ptr_to_short + =4; то цей оператор пересуне вказівник на 4 елементи (8 ба йтів).

Декрементування вказівників. Все що було сказано по відношенню до операції Інкрементування вказівників відноситься і до операції Декрементування вказівників, тільки в цьому випадку величина вказівника зменшується.

Обчислення зміщення операція з вказівниками. Зміщення – це фактичне віднімання двох вказівників, Якщо є два вказівники на різні елементи одного масиву, то їх можна відняти один від одного і вияснити , на якій відстані  вони знаходяться Адресна арифметика забезпечує автоматичне масштабування результату, і в підсумку відстань виражається в кількості елементів. Якщо ptr1 i ptr2 вказують на елементи одного і того масиву, то вираз ptr1-ptr2 дає відстань між цими елементами.

Вказівники можна також порівнювати. Порівняння має сенс тільки для вказівників на один і той масив. При цьому виконуються операції порівняння = =, !=, <, >, >+, <+.

Молодші елементи масиву, тобто елементи з меншими індексами мають і менші адреси. Якщо ptr1 i ptr2 вказують на елементи одного і того масиву, то співвідношення ptr1 < ptr2 істинне, коли ptr1 вказує на елемент з меншим індексом, ніж ptr2

Операції множення і ділення над вказівниками не виконуються.

Таблиця всіх можливих операцій над вказівниками.

Операції

Опис

Присвоєння

Вказівнику можна присвоїти значення, адрес одержаний операцією &, або взятий з адресної константи (імені масиву)

Посилання на значення

Операція посилання * дає значення, яке знаходиться в змінній, на яку вказується (деколи її називають розіменуванням)

Одержання адреси

Можна використати до вказівника, одержавши вказівник на вказівник. Це заняття 15

Інкрементування

Додавання цілого числа до вказівника дає нову адресу в пам’яті

Декрементування

Віднімання цілого числа до вказівника дає нову адресу в пам’яті

Обчислення зміщення

Відстань (зміщення) між двома вказівниками обчислюється відніманням одного вказівника від другого

Порівняння

Операція дійсна для вказівників одного і того масиву

Індексний запис і вказівники.  Ім’я масиву без квадратних дужок – це вказівник на перший елемент масиву. Тому до першого елементу можна звертатися з допомогою операції посилання по вказівнику.  Нехай описаний масив  array[].   Тоді вираз *array дасть його перший елемент, *(array +1)   - другий і тє дє . Тоді можна записати такі співвідношення.

*(array)== array[0]

*(array +1)   == array[1]

*(array +2)   == array[2]

………………………………

*(array +n)   == array[n]

Це зв’язок між зверненням до масиву по індексу і через операції з вказівниками.

  1.  Постановка завдання

Описати і задати 2 масиви типу short і int розмірністю 10. Вивести на екран адреси всіх елементів обох масивів.

Описати і задати 2 масиви типу int і float розмірністю 7. Вивести на екран значення всіх елементів обох масивів з використанням адресної арифметики.

Описати і задати 2 масиви типу float i char розмірністю 5.. Вивести на екран адреси всіх елементів обох масивів.

Описати і задати 3 масиви типу char, int і float розмірністю 4. Вивести на екран значення всіх елементів обох масивів з використанням адресної арифметики

Описати 3 масиви типу char, short і int розмірністю 8. Вивести на екран адреси всіх елементів трьох масивів з використанням адресної арифметики.

Описати і задати 2 масиви типу int і float розмірністю 7. Вивести на екран значення всіх елементів обох масивів з використанням адресної арифметики.

Описати 3 масиви типу char, short і int розмірністю 8. Вивести на екран адреси всіх елементів трьох масивів.

Описати і задати 3 масиви типу char, int і float розмірністю 4. Вивести на екран значення всіх елементів обох масивів з використанням адресної арифметики.

Описати 3 масиви типу char, short і float розмірністю 6. Вивести на екран адреси всіх елементів трьох масивів з використанням адресної арифметики.

Описати і задати 2 масиви типу int і float розмірністю 7. Вивести на екран значення всіх елементів обох масивів з використанням адресної арифметики

Описати і задати 2 масиви типу int і float розмірністю 5. Вивести на екран адреси всіх елементів обох масивів з використанням адресної арифметики.

. Описати і задати 2 масиви типу int і float розмірністю 7. Вивести на екран значення всіх елементів обох масивів з використанням адресної арифметики.

. Описати і задати 2 масиви типу int і float розмірністю 8. Вивести на екран адреси всіх елементів обох масивів з використанням адресної арифметики.

. Описати і задати 2 масиви типу int і float розмірністю 7. Вивести на екран значення всіх елементів обох масивів з використанням адресної арифметики.

  1.  Методичні вказівки

  1.  Уважно прочитати умову задачі з індивідуального завдання. Визначити, що має бути отримано в результаті її розв'язку, які дані для цього потрібно ввести.
  2.  Використати знання про вказівники, операції над ними, правила адресної арифметики.
  3.  Для вводу й виводу даних використати бібліотеку функцій    <stdіo.h>.
  4.  Ввести текст програми. Звернути увагу на типи даних, що будуть використані в програмі.
  5.  Запустити програму на компіляцію. У  випадку необхідності виправити синтаксичні помилки.
  6.  Запустити програму на виконання. У  випадку необхідності виправити семантичні помилки.
  7.  Реалізувати програму для різних вхідних даних.
  8.  Результати роботи програми вивести на екран.

  1.  Зміст звіту

  1.  Постановка завдання.
  2.  Програма розв’язку завдання.
  3.  Результати  роботи програми.
  4.  Повідомлення про некоректно введені дані..
  5.  Результати всіх реалізацій програми;
  6.  Зміни, що зроблено в програмі, та результати виконання модифікованої програми
  7.  Висновок, в якому зазначити, наскільки розроблена програма відповідає умові задачі, як можна її вдосконалити.
  8.  Пояснення результатів.

  1.  Контрольні запитання

  1.  Який знак операції використовується для одержання адресу змінної?
    1.  Який знак операції використовується для одержання значення по адресу, що зберігається у вказівнику?
      1.  Що таке посилання по вказівнику?
        1.  Що таке вказівник?
        2.  Які операції можна виконувати над вказівниками.

  1.  Джерела інформації

  1.  Громов Ю.Ю., Татаренко С.И. Программирование на языке Си: Учебное пособие. - Тамбов, 1995. - 169с.
  2.  Подбельский В.В., Фомин С.С., Программирование на языке Си. М.: Финансы и статистика, 1999. .– 600с.
  3.  Керниган Б.В., Ричи Д.М. Язык программирования Си. \Пер. с англ., 3-е изд., испр.- СПб.: “Невский Диалект”, 2001. – 352с.
  4.  Бредли Л. Джонс, Питер Єйткен, Освой самостоятельно С за 21 день, 6-е изд.: Пер. З англ. — М.: Издательский дом "Вильямс", 2003.- 800с.
  5.  Культин Н., С/C++  в задачах и примерах. Санк-Петербург: "БХВ Петербург", 2004.
  6.  Бірюльов К.Ю., Дещинський Ю.Л., Селемонавічус А.А., Хавалко В.М., Худий А.М., Якимів Ю.Б. Методичний посібник «Конспект лекцій з дисципліни Системне програмування».-М.: Львів, 2005. – 149с.


 

А также другие работы, которые могут Вас заинтересовать

64412. Експериментальне обґрунтування ефективності використання ферментних препаратів та їх композицій в годівлі свиней 598.5 KB
  Їх використання в годівлі свиней дає можливість підвищити коефіцієнт трансформації поживних та біологічно активних речовин кормів у тваринницьку продукцію повніше реалізувати генетичний потенціал організму...
64413. НАЦІОНАЛЬНА СПЕЦИФІКА УКРАЇНСЬКОЇ НАРОДНОЇ КАЗКИ 195 KB
  Запропонована праця стосується виокремлення того своєрідного в українських народних казках що відрізняє їх від казкового епосу інших слов’янських етносів насамперед білоруського та російського.
64414. Розробка технології знепилювання хвостосховищ гірничо-збагачувальних комбінатів Кривбасу 557.15 KB
  Технологія видобутку корисних копалин з подальшим збагаченням бідних руд що існує насьогодні потребує великих територій під облаштування спеціальних місць для розміщення відходів збагачення хвостів.
64415. Патогенетичне обґрунтування способу лікування загострень хронічного періодонтиту 145.5 KB
  У останнє десятиріччя не дивлячись на значне збільшення об’єму та якості стоматологічної допомоги кількість пацієнтів з гострими запальними захворюваннями щелепнолицевої ділянки та шиї не зменшується...
64416. ІМУНОТОКСИЧНА ДІЯ СВИНЦЮ І КАДМІЮ ЯК ГІГІЄНІЧНА ПРОБЛЕМА 311.5 KB
  Одним з головних завдань профілактичної медицини, зокрема гігієни праці та промислової токсикології, є дослідження впливу хімічних чинників на організм працюючих, обґрунтування ранніх...
64417. Садові листовійки – філофаги в насадженнях яблуні та регулювання їх чисельності в Передгірному Криму 578 KB
  Останнім часом йде реконструкція старих насаджень поява садів нового типу за сучасними схемами посадки типами крони сортовим складом що відбивається на формуванні фауни листовійок у садових агроценозах.
64418. ЕФЕКТИВНІСТЬ СИСТЕМ ІНЖЕНЕРНОГО ЗАХИСТУ ВІД ПІДТОПЛЕННЯ САМОПЛИВНОГО ТА ПРИМУСОВОГО ТИПУ ТА НАПРЯМИ ЇХ УДОСКОНАЛЕННЯ 7.36 MB
  В Україні істотно поширені процеси підтоплення сільськогосподарських угідь і сільських населених пунктів, які супроводжуються підйомом рівня ґрунтових вод (РҐВ) та зумовлюють низку негативних процесів.
64419. КОМПЛЕКС ФІТОНЕМАТОД АГРОЦЕНОЗІВ ХМЕЛЮ ТА ЗАХОДИ РЕГУЛЯЦІЇ ЇХ ЧИСЕЛЬНОСТІ В ЗОНІ ПОЛІССЯ ТА ЛІСОСТЕПУ УКРАЇНИ 394.5 KB
  Тому одним із основних заходів збільшення валового збору хмелю і поліпшення його якості є надійний захист насаджень від патогенних організмів серед яких одними з найменш вивчених є паразитичні нематоди.
64420. РОЗВИТОК МЕТОДІВ МОДЕЛЮВАННЯ ТЕХНІЧНИХ ЗАСОБІВ ЕНЕРГОЗБЕРЕЖЕННЯ СИСТЕМ УПРАВЛІННЯ ДЛЯ ТЕПЛОВОЗНИХ ДИЗЕЛЬ-ГЕНЕРАТОРІВ 649 KB
  Питання підвищення енергозбереження тепловозних силових установок в умовах стрімкого зростання цін на дизельне паливо в Україні і інших країнах розглядається як одне з першорядних.