рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Ініціалізація покажчиків

Ініціалізація покажчиків - раздел Образование, Навчальної дисципліни Основи програмування та алгоритмічні мови Покажчики Найчастіше Використовують При Роботі З Динамічною Пам'яттю, Званою ...

Покажчики найчастіше використовують при роботі з динамічною пам'яттю, званою деякими естетами купою (переклад з англійської мови слова heap). Це вільна пам'ять, в якій можна під час виконання програми виділяти місце відповідно до потреб. Доступ до виділених ділянок динамічної пам'яті, званих динамічними змінними, проводиться тільки через покажчики. Час життя динамічних змінних - від точки створення до кінця програми або до явного звільнення пам'яті. У C++ використовується два способи роботи з динамічною пам'яттю. Перший використовує сімействі функцій mallос і дістався в спадок від З, другий використовує операції new і delete.

При визначенні покажчика треба прагнути виконати його ініціалізацію, тс є привласнення початкового значення. Ненавмисне використання неініціалізованих покажчиків - поширене джерело помилок в програмах. Ініціалізація записується після імені покажчика або в круглих дужках, або після знаку рівності.

Існують наступні способи ініціалізації покажчика:

1. Привласнення покажчику адреси існуючого об'єкту:

за допомогою операції отримання адреси:

int а = 5; // ціла змінна

int* p = &а; //в покажчик записується адреса а

int* p(&а); // те ж саме іншим способом

за допомогою значення іншого покажчика, що ініціалізував:

int* г = р;

за допомогою імені масиву або функції, які трактуються як адреса:

int b[10]; // масив

int* t = b; // привласнення адреси почала масиву

void f(int а ) { /* ... */ } // визначення функції

void (*pf)(int); // покажчик на функцію

pf = f; // привласнення адреси функції

 

2. Привласнення покажчику адреси області пам'яті в явному вигляді:

char* vp = (char *)0xB8000000;

Тут 0хВ8000000 - шестнадцатерічная константа, (char *) - операція приведення типу: константа перетвориться до типу покажчик на char.

 

3. Привласнення порожнього значення:

int* suxx = NULL;

int* rulez = 0;

У першому рядку використовується константа NULL, визначена в деяких заголовних файлах С як покажчик, рівний нулю. Рекомендується використовувати просто 0, оскільки це значення типу int буде правильно перетворено стандартними способами відповідно до контексту. Оскільки гарантується, що об'єктів з нульовою адресою немає, порожній покажчик можна використовувати для перевірки, посилається покажчик на конкретний об'єкт чи ні.

 

4. Виділення ділянки динамічної пам'яті і привласнення її адреси покажчику:

за допомогою операції new:

int* n = new int; III

int* m = new int (10); // 2

int* q = new int [10]; // 3

за допомогою функції mallос:

int* u = (int *)malloc(sizeof(int)); // 4

 

У операторі 1 операцію new виконує виділення достатнього для розміщення величини типу int ділянки динамічної пам'яті і записує адресу почала цієї ділянки в змінну n. Пам'ять під саму змінну n (розміру, достатнього для розміщення покажчика) виділяється на етапі компіляції.

У операторі 2, окрім описаних вище дій, проводиться ініціалізація виділеної динамічної пам'яті значенням 10.

У операторі 3 операція new виконує виділення пам'яті під 10 величин типу int (масиву з 10 елементів) і записує адресу почала цієї ділянки в змінну q, яка може трактуватися як ім'я масиву. Через ім'я можна звертатися до будь-якого елементу масиву. Якщо пам'ять виділити не вдалося, за стандартом повинне породжуватися виключення bad_alloc. Старі версії компіляторів можуть повертати 0.

У операторі 4 робиться те ж саме, що і в операторі 1, але за допомогою функції виділення пам'яті malloc, успадкованої з бібліотеки З. У функцію передається один параметр - кількість пам'яті, що виділяється, в байтах. Конструкція (int*) використовується для приведення типу покажчика, що повертається функцією, до необхідного типа. Якщо пам'ять виділити не вдалося, функція повертає 0.

Операцію new використовувати переважно, чим функцію malloc, особливо при роботі з об'єктами.

Звільнення пам'яті, виділеної за допомогою операції new, повинно виконуватися за допомогою delete, а пам'яті, виділеною функцією malloc - за допомогою функції free. При цьому змінна-покажчик зберігається і може ініціалізуватися повторно. Приведені вище динамічні змінні знищуються таким чином:

 

delete n; delete m; delete [] q; free (u);

 

Якщо пам'ять виділялася з допомогою new[], для звільнення пам'яті необхідно застосовувати delete[]. Розмірність масиву при цьому не указується. Якщо квадратних дужок немає, то ніякого повідомлення про помилку не видається, але помічений як вільний буде тільки перший елемент масиву, а інші опиняться недоступні для подальших операцій. Такі елементи пам'яті називаються сміттям.

За допомогою комбінацій зірочок, круглих і квадратних дужок можна описувати складені типи і покажчики на складені типи, наприклад, в операторі

 

int *(*р[10])();

 

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

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

При інтерпретації складних описів необхідно дотримуватися правила з середини назовні:

1) якщо праворуч від імені є квадратні дужки, це масив, якщо дужки круглі - це функція;

2) якщо зліва є зірочка, це покажчик на проінтерпретовану раніше конструкцію;

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

4) в останню чергу інтерпретується специфікатор типу.

 

– Конец работы –

Эта тема принадлежит разделу:

Навчальної дисципліни Основи програмування та алгоритмічні мови

ХАРКІВСЬКИЙ НАЦІОНАЛЬНИЙ ЕКОНОМІЧНИЙ УНІВЕРСИТЕТ... Методичні рекомендації до лабораторних робіт з навчальної дисципліни...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Ініціалізація покажчиків

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

ЗАГАЛЬНІ ПОЛОЖЕННЯ
Методичні рекомендації призначені для виконання лабораторних робіт з першої частини навчальної дисципліни «Основи програмування та алгоритмічні мови». Перед виконанням кожної роботи необхі

Покажчики
Коли компілятор обробляє оператора визначення змінної, наприклад, int i =10, він виділяє пам'ять відповідно до типу (int) і ініціалізував її вка-заним значенням (10). Всі звернення в програмі до зм

Операції з покажчиками
З покажчиками можна виконувати наступні операції: разадресация, або непряме звернення до об'єкту (*), привласнення, складання з константою, віднімання, інкремент (++), декремент (--), порівняння, п

Рядки символів як масиви
Рядок має тип “масив з символів”. Рядок завершується нульовим символом. Наприклад, рядок QWERTY має тип char [7], порожній рядок “ має тип char[1]. Рядкова константа - це послідовні

Рядкові бібліотечні функції
Функції для роботи з рядками описані в заголовному файлі string.h. Деякі з них: char *stpcpy(char *dest, const char *src); Копіює символи рядка, поки не скопіює нульовий символ. П

Відкриття і закриття потоку
Схема роботи з потоком така ж, як і з файлом: відкрити потік, виконати читання і/або запис, закрити потік. Відкриває потік функція FILE* fopen( const char *filename,// ім

Введення і виведення рядків
Читання рядка з потоку виконується функцією char *fgets( char *s, // покажчик на буфер, що приймає рядок int n, // гранична кількість читаних символів (звичайно розмір бу

Форматоване виведення
Розглянуті вище функції виводять інформацію в потік без або майже без перетворення. Функція fprintf перетворить дані, що виводяться, в послідовність символів, керуючись рядком формату. int

Форматоване введення
Для форматованого введення з потоку застосовують функцію int fscanf (FILE *stream, const char *format [, address, ...] ) - повертає число полів введення тих, що

Варіант 20
Написати програму, яка: · Виводить текст на екран дисплея; · Визначає найбільшу кількість підряд пропусків, що йдуть, в тексті; · По натисненню довільної клавіші по черзі

Стадії і команди препроцесорної обробки
У інтегроване середовище підготовки програм на С++ в компілятор мови як обов'язковий компонент входить препроцесор. Призначення препроцесора - обробка початкового тексту програми до її компіляції.

Включення текстів з файлів
Для включення тексту з файлу використовується команда #include, що має дві форми запису: #include <имя_файла> // Ім'я в кутових дужках #include "имя_файла" // Ім'я

Умовна компіляція
Умовна компіляція забезпечується в мові С++ набором команд, які, по суті, управляють не компіляцією, а препроцесорною обробкою: #if константний вираз #ifdef ідентифікатор

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

Теоретичний матеріал
  Структури - це складені типи даних, побудовані з використанням інших типів. Вони є об'єднаний загальним ім'ям набір даних різних типів. Саме тим, що в ст

Масиви структур.
Методика створення масивів структур - така сама, як і при створенні масивів. Наприклад, що б створити масив з 100 екземплярів BestStudent структури Student, необхідний наступний запис: Stu

Варіант 3
Відомість використання машинного часу на обчислювальному центрі: № з/п Кафедра Використання машиного часу (год) Відхилення

Варіант 4
Відомість споживання електроенергії на заводах міста: № з/п Завод Потреба електроенергії, кВт/ч Відхилення від плана

Варіант 5
Відомість руху матеріалів на складах підприємства за звітний період: № п/п Склад Рух материалів за період, грн остаток на к

Варіант 8
Відомість відвідин занять студентами: № з/п Прізвище Пропущено годин Відхилення від плану за планом

Варіант 10
Відомість обліку часу роботи верстатів підприємства: № з/п Тип станка Час роботы (год) Відхилення від плану

Варіант 11
Відомість випуску деталей робітниками цеху: № з/п Прізвище Кількість деталей (шт.) Брак виготовлено

Варіант 13
Відомість нарахування зарплати співробітникам підприємства: № з/п Прізвище Нараховано (грн) Виплати

Варіант 17
Відомість оплати ремонту обладнання підприємства за звітний період: № зп Обладнання Вид ремонту Вартість комплектуючих

Варіант 20
Відомість телефонних переговорів абонента за звітний період: № зп Абонент № телефона Тривалість переговорів (хв.)

Короткі теоретичні відомості
  STL - це бібліотека стандартних шаблонів. Вона містить, наприклад, що часто зустрічаються способи організації даних - так називані контейнери: динамічні масиви, двонаправленi списки

Варіант 20
Скласти програму, яка містить поточну інформацію про заявки на туристичні тури. Кожна заявка включає: · пункт призначення; · номер туру; · прізвище і ініціали за

Дослідження структури windows-додатка
  Ціль лабораторної роботи - одержання практичних навичок у побудові базового додатка для Win32, дослідження параметрів віконних процедур. Перед виконанням лабораторної робот

Перелік бітових прапорів стилю класу вікна
Прапор Опис CS _VREDRAW Перемалювати вікно при зміні висоти вікна CS_HREDRAW Перемал

Список визначених системних піктограм
Іконка Опис IDI_APPLICATION Піктограма додатка, задана за замовчуванням IDI_ASTERISK

Список визначених ідентифікаторів курсору
Курсор Опис IDC_APPSTARTING Стандартна стрілка й пісковий годинник. IDC_ARROW Станда

Перелік бітових прапорів стилю вікна
Прапор Опис WS_BORDER У вікна є тонка обмежуюча рамка WS_CAPTION WS_BORDER | WS_DLGF

Варіант № 20
Вікно повинне: · бути згорнутим; · мати власний контекст; · завантажувати іконку у вигляді молодого півмісяця; · мати курсор у вигляді двухконечной стрілки з нап

Дослідження взаємодії додатка з користувачем
  Ціль лабораторної роботи: Досліджувати можливості функцій Win32 API по створенню візуального інтерфейсу додатка, одержати практичні навички написання й настроювання програм, які міс

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

Створення меню
Що таке меню. Меню - це список команд й опцій програми. У ряді випадків пункти меню можуть бути представлені растровими зображеннями. Вибрати елемент меню можна за допомогою миші, клавіатури або пе

Діалогові вікна
Використання меню варто розглядати як найпростіший спосіб уведення інформації користувачем. Більше зробленим методом передачі даних у програму є застосування діалогових вікон. Можливість уведення д

Розробка діалогового вікна
Для діалогового вікна необхідно скористатися відповідним редактором. Редактор діалогових вікон викликається в процесі реалізації ланцюжка дій ( Рис. 7.4).  

Компонування діалогового вікна
За допомогою миші розмістите поле й напис у потрібнім місці й задайте їхній розмір. Щиглик мишею усередині макета діалогового вікна дозволить відредагувати заголовок вікна або текстовий рядок, що н

Бітові прапори, що визначають поводження й вид елемента меню
Прапор Опис MF_BITMAP Замість рядка в якості меню застосовується bitmap MF_BYCOMMAND

Можливі типи рядка стану
Тип Опис SBT_NOBORDERS Панель прорисовується без обмежувальних ліній SBT_POPOUT Пане

Перелік бітових прапорів стилю вікна
Прапор Опис WS_BORDER У вікна є тонка обмежуюча рамка WS_CAPTION WS_BORDER | WS_DLGF

Стилі діалогового вікна
Прапор Ефект DS_ABSALIGN Позиціювати діалогове вікно щодо лівого верхнього кута екрана DS_SYSMODA

Таблиця 7.5
Стилі вікон класу "кнопки" Стиль Опис BS_3STATE Створити прапорець, що має три стани

Варіант № 3
Головне меню містить три групи команд: · Головне меню містить розділ "Фігури" з іменами геометричних фігур: коло, квадрат, трикутник, прямокутник і шестикутник. При виборі назви

Варіант № 11
Головне меню містить три групи команд: · Розділ "Файл" головного меню містить рядка "Створити", "Відкрити", "Демо-версiя" й "Вихід". При в

Варіант № 13
Головне меню містить три групи команд: · Робочу область вікна додатка повністю займає тимчасове вікно з порожнім головним меню. Головне меню вікна додатка із тримає розділ "Файл"

Варіант № 17
Головне меню містить три групи команд: · Головне меню містить розділ "Файл" з рядками "Створити", "Відкрити", "Видалити" й "Вихід". При ви

Варіант № 18
Робочу область вікна додатка, повністю займає тимчасове вікно з порожнім головним меню. Головне меню вікна додатка містить розділ "Файл" з рядками "Відкрити" й "Закрити&quo

Варіант № 20
· Тип елемента керування: Combobox. Мінімальне число пунктів меню - 5, максимальне число пунктів меню - 11. · Перша сторінка блокнота містить назви книг, друга - на звання глав обраної кни

Короткі теоретичні відомості й історичний аспект
  Середовище .NET Framework   .NET Framework — центральна частина Visual C++ 2005, як і всіх інших засобів розробки .NET компанії Microsoft. Середовище .NET Fra

Специфіка C++/CLI: фундаментальні типи даних
Фундаментальні типи ISO/ANSI C++ можна використати у своїх програмах C++/CLI, і з арифметичними операціями вони працюють точно так само, як й у рідному C++. Крім того, в C++/CLI визначені два додат

Фундаментальні типи C++/CLI
Фундаментальний тип Розмір (у байтах) Клас значень CLI bool System: -.Boolean

Створення простого керованого консольного додатка.
Для створення консольного додатка на керованому C++ варто виконати наступну послідовність операцій:   1. Запустите на виконання Visual Studio. NET (2005 або більше нової)

Стандартний ввід-вивід
Клас System::Console забезпечує підтримку стандартного вводу-висновку. Метод ReadLine класу System::Console зчитує уведену із клавіатури рядок як текстову. String^ line = Console::ReadLine

Часто використовувані специфікатори формату
Специфікатор формату Опис C або з Виводить значення в грошовому форматі. dабо d Виво

Часто використовувані специфікатори формату
Специфікатор формату Опис C або з Виводить значення в грошовому форматі. dабо d Виво

Дескриптори, що відслідковують
Дескриптори, що відслідковують, (tracking handle) мають подібність із рідними покажчиками C++, однак є й істотні відмінності. Дескриптор зберігає адреса, і адреса, що у ньому втримується, автоматич

Оголошення дескрипторів, що відслідковують
Для специфікації дескриптора типу, необхідно помістити символ : (часто називаний "капелюхом") слідом за ім'ям типу. Наприклад, от як можна оголосити відслідковує дескриптор, що, по імені

Масиви CLR
Масиви CLR відрізняються від масивів рідного C++. Пам'ять для масиву CLR виділяється в керованій купі, але це ще не все. Масиви CLR мають убудовану функціональність, який немає в масивів рідного C+

Багатомірні масиви
У програмах на C++/CLI можна створювати масиви із двома й більше вимірами; максимальна кількість вимірів масиву - 32, чого цілком достатньо в більшості випадків. Кількість вимірів масиву вказується

Багатомірні масиви
У програмах на C++/CLI можна створювати масиви із двома й більше вимірами; максимальна кількість вимірів масиву - 32, чого цілком достатньо в більшості випадків. Кількість вимірів масиву вказується

Цикл foreach
При обробці масивів і рядків дуже часто, використають оператори циклів. Всі оператори циклів, які застосовуються в мові ISO/ANSI C++, також використаються й у и в C++/CLI. Але мова C++/CLI пропонує

Варіант 20
В одномірному масиві, що складається з п речовинних елементів, обчислити: o добуток позитивних елементів масиву; o суму елементів масиву, розташованих до мінімального елемента.

Навчальне видання
  Методичні рекомендації до лабораторних робіт з навчальної дисципліни «Основи програмування та алгоритмічні мови» Частина 2 для студентів напряму

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги