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


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


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


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


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


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


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


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


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


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



Контакти
 


Тлумачний словник
Авто
Автоматизація
Архітектура
Астрономія
Аудит
Біологія
Будівництво
Бухгалтерія
Винахідництво
Виробництво
Військова справа
Генетика
Географія
Геологія
Господарство
Держава
Дім
Екологія
Економетрика
Економіка
Електроніка
Журналістика та ЗМІ
Зв'язок
Іноземні мови
Інформатика
Історія
Комп'ютери
Креслення
Кулінарія
Культура
Лексикологія
Література
Логіка
Маркетинг
Математика
Машинобудування
Медицина
Менеджмент
Метали і Зварювання
Механіка
Мистецтво
Музика
Населення
Освіта
Охорона безпеки життя
Охорона Праці
Педагогіка
Політика
Право
Програмування
Промисловість
Психологія
Радіо
Регилия
Соціологія
Спорт
Стандартизація
Технології
Торгівля
Туризм
Фізика
Фізіологія
Філософія
Фінанси
Хімія
Юриспунденкция






Використання масивів і покажчиків

 

У мові С++ масиви і покажчики зв'язані між собою. При оголошенні масиву у вигляді :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[10] = {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 [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; . При цьому автоматично виконується операція збільшення адреси з урахуванням типу масиву і кількості, що відводиться, байт для кожного його елемента, отже :

адреса х[і] = адреса x[0] + і*sizeof ( тип ); .

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

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

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

р + n ; ,

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

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

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

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

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

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

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

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

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

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

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

 

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

 

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

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

Приклад 2.4Обчислити середнє значення додатних елементів одновимірного масиву.

Наведемо кілька варіантів програмної реалізації цієї задачі.

// P2_7.CPP — обчислення середнього значення

// додатних елементів масиву

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

#include < iostream>

using namespace std;




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

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

 

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


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