Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



Лекція №6

Тема: Динамічний розподіл пам’яті. Статичні та динамічні масиви.

 

Мета: Закріплення знань з теми показчики та посилання. Вивчення механізму динамічного керування пам’ятю. Вивчення поняття динамічний масив.

 

Питання:

1. Поняття динамічного масиву.

2. Виділення пам’яті.

3. Доступ до елементів масиву через показчики.

4. Масиви показчиків.

У мові С++ масиви й покажчики зв'язані між собою. При оголошенні масиву у вигляді :int mas [20];ім'я масиву masвизначається як покажчик-константа на перший (нульовий) елемент масиву, тобто на адресу першого елемента масиву &mas[0].

Для доступу до елементів масиву існує два способи:

— використання індексу елемента масиву, наприклад, mas[2]або mas[i];

використання адресного вираження тобто вираження з покажчиком на

масив, наприклад, *( mas +2 ) або *( mas+i ).

Ім'я масив-покажчик, можна записати в наступному виді:

 

int mas [20];

int *ptr1;

ptr1 = mas; // або ptr1 = &mas[0];

Після оголошення масиву int mas [20]; вираження &mas[0]іmas є еквівалентними.

Для обнуління елементів оголошеного масиву досить ініціалізувати його перший елемент: int mas[0] = {0} ; При цьому першому елементу не обов'язково привласнювати значення 0. Якщо в оголошеному масиві ініціалізувати дкілька перших елементів, то інші ініціалізуються нулями.

Наприклад, у випадку коли float mas [10] ={ 12.2, 34.56 }; , вісім елементів, що залишилися одержать значення 0.

При оголошенні масивів можна використати одну з форм запису :

< тип > < ім'я > [n] //Оголошення одномірного

// масиву з nелементів

< тип > < ім'я > [n] = { значення } //Значення елементів масиву

< тип > < ім'я > [ ] = { значення }// розділені комі

Наприклад:

float m[6];

float m[6] = { 3.4, 4.5, 5.6, 6.7, 8.9, 10.3 };

float m[ ] = { 3.45, 4.56, 5.67, 6.78 };

Двовимірні й багатомірні масиви оголошуються аналогічним образом, тобто правомірний запис :

 

int mas [2][5] ={ 1, 2, 3, 4, 5,

10, 11, 13, 14, 25 };

int mas [ ][5] ={ 1, 2, 3, 4, 5,

10, 11, 13, 14, 25 }; .

При оголошенні одномірних масивів їхній розмір можна не вказувати, якщо оголошений масив відразу ініціалізувати.

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

Оскільки для масивів завжди в пам'яті приділяється суцільний блок комірок пам'яті , у яких розташовуються елементи, то адреса наступного елемента mas[1] можна вказати шляхом збільшення покажчика на 1, тобто якщо p = &mas[0] , те p=p + 1 або( p += 1)ідля i елемента масиву адреса може бути визначений як p + i; . При цьому автоматично виконується операція збільшення адреси з урахуванням типу масиву й кількості, що відводить, байт для кожного його елемента, отже : адреса [[i] = адреса x[0] + i* sizeof ( тип ) ; .

Якщо два покажчики р1ір2указують на елементи одного масиву, то до них застосовні операції відносини: == , != , < , <= , > , >= .

Наприклад, відношення виду р1 < р2 істинно, якщо р1указує на більше ранній елемент, чим р2 . Любою покажчик можна зрівняти з нулем.

Варто звернути увагу, що для покажчиків, що посилаються на елементи різних масивів, результат арифметичних операцій і відносин не визначений. В арифметиці з покажчиками можна використати адресу не існуючого "наступні за масивом " елемента. Крім того, до покажчика можна додати деяке ціле значення, наприклад можна записати: р + n ,

 

де n— ціле значення, а р — покажчик.

Це вираження визначає область об'єкта, що займає n -е місце після об'єкта, на який указує р, при цьому nавтоматично множиться на коефіцієнт, дорівнює відповідній довжині об'єкта. Наприклад , якщо intзаймає 4 байти , те цей коефіцієнт дорівнює чотирьом.

Допускаються також вирахування покажчиків, що вказують на елементи одного масиву.

Наприклад, якщо р1< p2,тер2 - р1+1 — це число елементів масиву від р1дор2включно.

Таким чином, з покажчиками допускаються наступні операції :

- присвоювання значення одного покажчика іншому;

- додавання й вирахування покажчиків і даного цілого типу ( р+5 );

- порівняння двох покажчиків, що посилаються на елементи одного масиву;

- присвоювання покажчику нуля й порівняння з нулем.

Інші операції з покажчиками заборонені.

Для покажчика дозволяються вираження виду:

 

р1 = mas;або р++ ,

тут р— покажчик , mas — масив.

Розглянемо демонстраційні приклади програм роботи з покажчиками.


Читайте також:

  1. Вид заняття: лекція
  2. Вид заняття: лекція
  3. Вид заняття: лекція
  4. Вид заняття: лекція
  5. Вид заняття: лекція
  6. Вступна лекція
  7. Вступна лекція 1. Методологічні аспекти технічного регулювання у
  8. Клітинна селекція рослин.
  9. Колекція фонограм з голосами осіб, які анонімно повідомляли про загрозу вибуху
  10. ЛЕКЦІЯ (4): Мануфактурний період світової економіки
  11. Лекція - Геополітика держави на міжнародній арені
  12. Лекція 02.04.2013




Переглядів: 547

<== попередня сторінка | наступна сторінка ==>
Лекція №5 | ПрикладОбчислити середнє значення позитивних елементів одномірного масиву.

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.016 сек.