15292

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

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

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

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

Украинкский

2013-06-11

62 KB

7 чел.

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с.


 

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

4150. Эффект Холла в германиевом полупроводнике n-типа 677.5 KB
  Эффект Холла в германиевом полупроводнике n-типа Цель роботы: Установить зависимость напряжения Холла при комнатной температуре и постоянном магнитном поле от управляющего тока и построить график. Измерить зависимость напряжения в образце при комнат...
4151. Метод балансовой увязки. Методы линейного и динамического программирования 113 KB
  Вопрос 1. Метод балансовой увязки и графический метод и их применение в экономическом анализе В экономическом анализе используются различные балансовые сопоставления и увязки. Например, сопоставляется товарный баланс для определения суммы реализации...
4152. Общественные блага и современная рыночная экономика 83 KB
  Введение Экономика как наука существует уже почти две с половиной тысячи лет, со времен проявления трудов великих греков – Ксенофонта и Аристотеля, посвященных проблемам хозяйства. Примерно в это время в ряде регионов мира уже сложились достато...
4153. Типы организации промышленного производства. Состав бизнес плана 94 KB
  Типы организации промышленного производства В зависимости от формы специализации производственные подразделения предприятия организуются по следующим типам производственной структуры: технологическому, предметному и смешанному предметно-технологиче...
4154. Производство комплектующих для вычислительной техники. Бизнес план 898.5 KB
  Введение Люди всегда хотят начать самостоятельное дело. Но, к сожалению, одного желания мало. Каждый предприниматель, начиная свою деятельность, должен ясно представлять потребность на перспективу в материальных, финансовых, трудовых и интеллектуаль...
4155. Эргономика как наука. Основные содержания курса эргономики 197 KB
  Введение Эргономика изучает особенности и возможности функционирования человека в системах, человек, вещь, среда. Эргономика - наука о системах. Она включает в себя такие понятия, как антропометрия, биомеханика, гигиена труда, физиология труда, техн...
4156. Бухгалтерское дело 582 KB
  В тексте курса последовательно раскрыты история бухгалтерского дела, порядок организации и ведения учета в зарубежных странах, концепция реформирования бухгалтерского учета в РФ, бухгалтерский учет на различных стадиях существования организации и др...
4157. История создания фильма Если завтра война 137.5 KB
  История создания фильма Если завтра война Фильм Если завтра война - это один из первых советских предвоенных художественных фильмов о готовности СССР к отражению нападения вероломных и коварных агрессоров. Фильм подготовлен коллективом кинорежис...
4158. Инвестиционная стратегия предприятия в современных условиях 206 KB
  Введение Одной из основных отличительных черт рыночной экономики является способ распределения ресурсов на основе рыночного механизма. Рыночный механизм в свою очередь функционирует на основе модели равновесия спроса и предложения на необходимые рес...