Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпори частина 1.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
248.38 Кб
Скачать
  1. Передача параметрів у функції за значенням та посиланням. Порівняльна характеристика.

Мова С++ має два способи передачі параметрів: передача аргументів за значенням і передача аргументів за посиланням (адресою). При: передачі аргументів за значенням значення аргументу копіюється у відповідний формальний параметр функції. При передачі аргументів за посиланням передається не копія значення аргумента, а його адреса. Чому не можна задавати вираз у ролі аргумента коли передача аргумента у функцію відбувається за посиланням? Коли передача аргумента у функцію відбувається за посиланням не можна задавати вираз у ролі аргумента, тому що в функцію повинна передаватися адреса змінної (яка знаходиться в оперативній пам’яті компютера), а вираз – це не змінна, він не міститься в ОЗП і, відповідно, не має адреси.

  1. Створення та обробка динамічних масивів. Видалення та вставка елементів у динамічний масив.

Динамічним називається масив, розмірність якого стає відомою в процесі виконання програми.

До цього часу у програмах ми користувались статично та автоматично розприділении змінними. Пам'ять для цих змінних розподіляється ще на етапі компіляції. Динамічні змінні створюють на замвлення користувача і видаляють теж за його вимогою. Динамічні змініні існують від точки створення до точки видалення ( або до кінця роботи програмт). Створення динамічних змінних у мові С відбувється за допомогою функції malloc (memory allocation –виділення)

Синтаксис ф-ції MALLOC(тип size_t) виділяє в динамічній памяті ділянку розміром size і повертає адресу створеної ділянки

Ф-ція CALLOC використовується для виділення памяті для динамічного масиву.

Динамічною називають пам'ять, яку можна замовити на етапі виконання програми. У С++ виділення дин памяті виконує операця new знищення - delete

Для створення динамічних змінних використовують операцію new, визначену в C++: покажчик = new имя_типа[ініціалізатор]; де ініціалізатор – вираз в круглих дужках. Операція new дозволяє виділити і зробити доступною ділянка динамічної пам'яті, яка відповідає заданому типу даних. Якщо заданий ініціалізатор, то в цю ділянку буде занесено значення, вказане в ініціалізаторі. int* x=new int(5); Для видалення динамічних змінних використовується операція delete, визначена в C++: delete покажчик; де покажчик містить адреса ділянки пам'яті, раніше виділений за допомогою операції new. delete x; Операція new при використанні з масивами має наступний формат: new тип_массива Така операція виділяє для розміщення масиву ділянку динамічної пам'яті відповідного розміру, але не дозволяє ініціалізувати елементи масиву. Операція new повертає покажчик, значенням якого служить адреса першого елементу масиву. При виділенні динамічній пам'яті розміри масиву повинні бути повністю визначені. //виділення динамічній пам'яті 100*sizeof(int) байт int* а = new int[100];

// Створення одновимірного массиву

int *mas = new int[a];

// Створення двовимірного масиву з N рядків по M елементів

// Створення масиву вказівників на одновимірні підмасиви

int **M = new int *[N];

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

{// Створення одновимірного підмасиву

p[i] = new int[M];}

// Вилучення одновимірного масиву

delete [] mas;

// Вилучення двовимірного масиву

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

{// Вилучення одновимірного підмасиву

delete [] p[i];}

// Вилучення масиву вказівників на одновимірні підмасиви

delete [] M;

  1. Масиви вказівників. Динамічні двовимірні масиви. Нехай маємо однотипні змінні( типу int) і потрібно обробляти змінні ніби вони у масиві, як якусь групу елементів. У таких випадках ств. масив вказівників на потрібні змінні

Int a =5, b=10, c=-2, d=100, e=123;

Int*arr[5]= {&a, &b,&c,&d,&e}

Int Dob = 1;

For(int i=0; i<5;++i)

{cout<<*arr[i];

Dob*=*arrr[i]

}

Cout<<”Dobutok=”<<Dob<<endl;

Розглянемо оголошення int*arr[5] . таке оголошення назив складним, адже в ньому зустрічаються [ ], * в одному одночасно. У складних оголошеннях не використовують ( ). Інтерпретація оголошення відбувається за наступним алгоритмом

  1. Шукаємо в оголошенні ідентифікатор( імя змінної)

  2. Аналізуємо операцію справа та зліво від ідентифікатора і обираємо ту, що має вищий пріоритет і так далі… в останню чергу читається імя типу.

Int * arr [5]

4 3 2 1

Операції [ ], ( ) – мають вищий пріоритет, * - нищий

Двовимірний динамічний масив з m рядків і n стовпчиків займає в пам‟яті сусідні m*n комірок, тобто зберігається так само, як і одновимірний масив з m*n елементів. При розміщенні елементи двовимірних масивів розташовуються в

пам‟яті підряд один за одним з першого до останнього без проміжків у послідовно зростаючих адресах пам‟яті. Наприклад, дійсний масив 3×5 зберігається у пам‟яті в такий спосіб:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

0-й рядок 1-й рядок 2-й рядок

У такому масиві перші п‟ять елементів належать до першого рядка, наступні п‟ять – до другого і останні п‟ять – до третього. Нагадаємо, що a – вказівник на початок масиву, тобто на елемент a[0][0]. Щоб звернутися, наприклад, до елемента a[1][3], слід “перестрибнути” від початку масиву через 5 елементів нульового рядка й 3 елементи пер-

шого рядка, тобто написати: *(a+1*5+3). У загальному випадку до елемента a[i][j] можна звернутися в такий спосіб: *(a+i*5+j). Але цей спосіб роботи з двовимірним масивом є не надто зручний, тому що в програмі при звертан-

ні до елемента масиву доводиться розадресовувати вказівник і обчислювати індекс елемента.

Оголосити дійсний динамічний масив 3×5 можна як одновимірний з 15-ти елементів:

float *a=new float [3*5]; чи то float *a=(float *)сalloc(3*5, sizeof(float));

Пам‟ять від створеного в такий спосіб масиву очищується за допомогою операцій відповідно delete й free:

delete []a; чи то free(a);

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