Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Лабораторна робота № 10

Читайте также:
  1. Word. Робота з великими документами
  2. Вешалка для игл лабораторная
  3. Глава 36. Лабораторная крыса
  4. Глава IV Робота Суду
  5. Дипломних проектах (роботах)
  6. Індивідуальна робота вчителя-вихователя у навчально-виховному процесі. Робота з важковиховуваними учнями.
  7. Індивідуально – консультативна робота студентів

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

Мета роботи: Навчитись визначати адреси елементів масиву з використанням адресної арифметики.

 

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

Вказівники і типи змінних. Змінні різних типів займають різний об’єм пам’яті. Адреси змінної являє собою адресу першого молодшого байта.

Наприклад,

char =12252;

short =90;

float t=1200.

Опис і задання вказівників на ці змінні

char *p_vchar;

short *p_vshor;

float *p_vfloat;

p_vchar=&vchar;

p_vshor=&vshor; /* додаткові оператори */

p_vfloat=&vfloat;

Кожний вказівник рівний адресі першого байта змінної, на яку він вказує. Тому p_vshor=1000, p_vchar=1003, а p_vfloat=1 006.

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

&a[0] = = a

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

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

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

Приклад.

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

ptr_short ++;

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

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

2 Індивідуальні завдання

№ вар. Завдання
1. - Описати і задати 2 масиви типу short і int розмірністю 10. Вивести на екран адреси всіх елементів обох масивів з використанням адресної арифметики і без її використання.  
2. - Описати і задати 2 масиви типу int і float розмірністю 7. Вивести на екран значення всіх елементів обох масивів з використанням адресної арифметики і без її використання  
3. - Описати і задати 2 масиви типу float i char розмірністю 5.. Вивести на екран адреси всіх елементів обох масивів з використанням адресної арифметики і без її використання.  
4. - Описати і задати 3 масиви типу char, int і float розмірністю 4. Вивести значення елементів масивів з використанням адресної арифметики і без її використання  
5. - Описати 3 масиви типу char, short і int розмірністю 8. Вивести на екран адреси всіх елементів трьох масивів з використанням адресної арифметики і без її використання.  
6. - Описати і задати 2 масиви типу int і float розмірністю 7. Вивести на екран значення всіх елементів обох масивів з використанням адресної арифметики і без її використання  
7. - Описати 3 масиви типу char, short і int розмірністю 8. Вивести на екран адреси всіх елементів трьох масивів.  
8. - Описати і задати 3 масиви типу char, int і float розмірністю 4. Вивести екран значення всіх елементів обох масивів з використанням адресної арифметики і без її використання  
9. - Описати 3 масиви типу char, short і float розмірністю 6. Вивести на екран адреси всіх елементів 3-х масивів з використанням адресної арифметики і без її використання  
10. - Описати і задати 3 масиви типу int, char і float розмірністю 7. Вивести на екран значення всіх елементів трьох масивів з використанням адресної арифметики і без її використання  
11. - Описати і задати 3 масиви типу char, int і float розмірністю 10. Вивести на екран адреси всіх елементів трьох масивів з використанням адресної арифметики і без її використання  
12. - Описати і задати 3 масиви типу char, int і float розмірністю 9. Вивести на екран адреси всіх елементів трьох масивів з використанням адресної арифметики і без її використання  
13. - Описати і задати 2 масиви типу int і float розмірністю 7. Вивести на екран значення всіх елементів обох масивів з використанням адресної арифметики і без її використання  
14. - Описати і задати 2 масиви типу int і float розмірністю 5. Вивести на екран адреси всіх елементів обох масивів з використанням адресної арифметики і без її використання  
15. - Описати і задати 2 масиви типу int і float розмірністю 7. Вивести на екран значення всіх елементів обох масивів з використанням адресної арифметики і без її використання  

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

1. Уважно прочитати умову задачі з індивідуального завдання. Визначити, що має бути отримано в результаті її розв'язку, які дані для цього потрібно ввести.

2. Використати знання про вказівники, операції над ними.

3. Для вводу й виводу даних використати бібліотеку функцій <stdіo.h>.

4. Ввести текст програми. Звернути увагу на типи даних, що будуть використані в програмі.

5. Запустити програму на компіляцію. У випадку необхідності виправити синтаксичні помилки.

6. Запустити програму на виконання. У випадку необхідності виправити семантичні помилки.

7. Реалізувати програму для різних вхідних даних.

 

4 Приклад виконання лабораторної роботи

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

Текст програми,:

#include <stdio.h>

#define MAX 10

/* Îïèñ ³ çàäàííÿ ìàñèâó òèïó short */

short s_array[MAX] = { 0,1,2,3,4,5,6,7,8,9 };

/* Îïèñ ³ çàäàííÿ ìàñèâó òèïó char */

char c_array[MAX] = { 0,1,2,3,4,5,6,7,8,9 };

/* Îïèñ ³ çàäàííÿ ìàñèâó òèïó float. */

float f_array[MAX] = {.0,.1,.2,.3,.4,.5,.6,.7,.8,.9 };

/* Îïèñ âêàç³âíèêà íà float. */

float *f_ptr;

/* Îïèñ âêàç³âíèêà íà int ³ çì³ííî¿ òèïó int */

char *c_ptr, i;

/* Îïèñ âêàç³âíèêà íà short */

short *s_ptr;

void main()

{ /* Çàäàííÿ âêàç³âíèê³â. */

c_ptr = c_array;

s_ptr = s_array;

f_ptr = f_array;

/* Âèâ³ä àäðåñ³â åëåìåíò³â ìàñèâó p dbrjhb */

for (i=0; i<MAX; i++)

{ printf("%ld\t", c_ptr++);

printf("%ld\t", s_ptr++);

printf("%ld\n", f_ptr++); }}

Результат роботи програми

4202524 4202504 4202536

4202525 4202506 4202540

4202526 4202508 4202544

4202527 4202510 4202548

4202528 4202512 4202552

4202529 4202514 4202556

4202530 4202516 4202560

4202531 4202518 4202564

4202532 4202520 4202568

4202533 4202522 4202572

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

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

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

3. Що таке посилання по вказівнику?

4. Що таке вказівник?

5. Які операції можна виконувати над вказівниками.

6. Операція зміщення над вказівниками?

7. Що таке адресна арифметика?

8. Що означає інкрементування вказівників?

9. Який зв’язок між елементами масиву і вказівниками.

10. Чи можна вказівники описувати разом зі змінними?


Дата добавления: 2015-07-17; просмотров: 155 | Нарушение авторских прав


Читайте в этой же книге: Заступник директора з НВР | Лабораторна робота № 1-2 | Постановка завдання | Постановка завдання | Лабораторна робота № 4 | Лабораторна робота № 5 | Постановка завдання | Лабораторна робота № 6-7 | Лабораторна робота № 8 | Постановка завдання |
<== предыдущая страница | следующая страница ==>
Лабораторна робота № 9| Лабораторна робота № 11-12

mybiblioteka.su - 2015-2024 год. (0.011 сек.)