15292

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

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

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

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

Украинкский

2013-06-11

62 KB

6 чел.

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


 

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

47579. МЕТОДИЧНІ ВКАЗІВКИ. ТУРИЗМОЗНАВСТВО 351.5 KB
  Основні етапи виконання дипломної роботи 5 3. Вимоги до дипломної роботи 6 4. Вибір напряму та затвердження теми дипломної роботи 7 5. Визначення об'єкту та предмету дипломної роботи складання робочого плану дослідження 9 7.
47580. Экологичность проекта 320 KB
  РАСЧЕТ ПЛАТЫ ЗА ВЫБРОСЫ ЗАГРЯЗНЯЮЩИХ ВЕЩЕСТВ В АТМОСФЕРУ ОТ ПЕРЕДВИЖНЫХ ИСТОЧНИКОВ Плата за допустимые выбросы загрязняющих веществ в атмосферу Пн руб. определяется по формуле Пн = Biнбн 19 где Bi количество iгo вида топлива израсходованного транспортными средствами за отчетный период т; Нбн базовый норматив платы за выбросы загрязняющих веществ в размерах не превышающих допустимые...
47582. АРХИТЕКТУРА АППАРАТНЫХ СРЕДСТВ 133.5 KB
  МЕТОДИЧЕСКИЕ УКАЗАНИЯ ПО ВЫПОЛНЕНИЮ КУРСОВОЙ РАБОТЫ ПО ДИСЦИПЛИНЕ АРХИТЕКТУРА АППАРАТНЫХ СРЕДСТВ для специальности 230111 Компьютерные сети Владивосток 2013 Методические указание по выполнению курсовой работы по дисциплине Архитектура аппаратных средств разработаны на основе федерального государственного образовательного стандарта ФГОС и рабочей программы 2013г. Указания предназначены в помощь студентам при написании и оформлении курсовой работы. ЦЕЛИ И ЗАДАЧИ ВЫПОЛНЕНИЯ КУРСОВОЙ РАБОТЫ Курсовая работа является одной из форм...