Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratorna_robota_6_Vkazivniki.doc
Скачиваний:
96
Добавлен:
23.02.2016
Размер:
119.81 Кб
Скачать

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

Тема: Робота з масивами через вказівники.

Мета: ознайомлення з поняттям вказівника. Набуття практичних навичок з типових задач обробки одновимірних та двовимірних масивів через вказівники.

КОРОТКІ ТЕОРЕТИЧНІ ВІДОМОСТІ

Вказівник – це адреса пам’яті, що розподіляється для розміщення ідентифікатора (у якості ідентифікатора може виступати ім’я змінної, масиву, структури, строкового літерала).

Якщо змінна оголошена як визначник, то вона містить адресу пам’яті, за якою може перебувати величина будь-якого типу.

При оголошенні змінної типу визначник, необхідно визначити тип об’єкта даних, адресу яких буде містити змінна, і ім’я покажчика з попередньою зірочкою (або групою зірочок).

Формат оголошення покажчика: Ім’я_типу * ім’я_покажчика;

Ім’я_типу задає тип об’єкта й може бути будь-якого основного типу.

Приклад:

char *z;

int *k, *i;

float *f;

*z позначає объкт типу char, на який указує z. Оператор *z=‘ ‘; засилає символ “пробіл” у ту ділянку пам’яті, адресу якої визначає покажчик z.

За допомогою операції звертання за адресою можна записувати значення: *xptr = 10; // записати число 10 за адресою xptr. Після виконання цього оператора значення змінної x стане рівним 10, оскільки xptr указує на змінну x.

Примітка: Для виводу значень покажчиків у форматному рядку printf() використовується специфікатор %p.

Дві змінні типу покажчик не можна підсумувати, однак до покажчика можна додати цілу величину. Правила додавання тут такі ж, як і в попередній операції.

Так, після команди xptr+=3; (xptr типу int) значення покажчика змінилося з FFF2 на FFFE.

На відміну від операції додавання, операція віднімання застосовна не тільки до покажчика й цілої величини, але й до двох покажчиків одного типу. Різниця покажчиків показує, скільки об’єктів відповідного типу може поміститися між зазначеними адресами.

У мові С визначена символічна константа NULL для позначення нульового значення покажчика.

Між покажчиками й масивами існує певний зв’язок.

Припустимо, є масив з 100 цілих чисел. Запишемо двома способами програму підсумовування елементів цього масиву:

long array[100];

long sum = 0;

for (int i = 0; i < 100; i++)

sum += array[i];

long array[100];

long sum = 0;

for (long* ptr = &array[0]; ptr < &array[99] + 1; ptr++)

sum += *ptr;

Згадування імені масиву без індексів перетвориться на адресу його першого елемента.

for (long* ptr = array; ptr < &array[99] + 1; ptr++)

sum += *ptr;

За допомогою покажчика у функцію, що викликається, можна передати адресу будь-якого об’єкта із викликаємої програми. Не міняючи самого параметра функції (адреси) можна змінити вміст ячейки по даній адресі.

#include

#include

void main()

{

void positive(int *m);

int k=-3;

positive(&k);

printf("\n k=%d",k);

getch();

}

void positive(int *m)

{

if (*m < 0)

*m=-*m;

}

Якщо в якості параметра функції використовується позначення масиву, то насправді усередину функції передається тільки адреса початку масиву, а значить усередині функції можна змінювати значення елементів такого масиву.

Якщо ми використовуємо масив b у якості параметра функції, то наступні конструкції ідентичні: float b[]; і float *b;

Приклад:

Розглянемо функцію, що зводить у квадрат значення елементів одномірного масиву.

#include

#include

void quart(int x[], int n);

void main()

{

int z[]={1,2,3,4};

int j;

quart (z, 4);

for (j=0;j < 4; j++)

printf("\n %d",z[j]);

getch();

}

void quart(int x[],int n)

{

int i;

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

x[i]*=x[i];

}

Заголовок функції може бути наступним: void quart(int *x, int n);

А звертання до елементів масиву усередині функції: *(x+i).

Двовимірний масив розмірності можна представити як одномірний масив одномірних масивів. Вираз a[i][j] переводиться компілятором в еквівалентний вираз *(*(a+i)+j).

ЗАВДАННЯ ДО ЛАБОРАТОРНОЇ РОБОТИ

Завдання для практичного виконання:

Реалізувати програму по роботі з одновимірними та двовимірними масивами за допомогою вказівників.

Введення елементів у задачах на двовимірні масиви здійснити наступним чином:

  • у першій задачі – за допомогою клавіатури;

  • у другій задачі – за допомогою генератора випадкових чисел

random(b-a+1)+a;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]