- •1 Основні відомості про вказівники
- •2. Вказівники та посилання
- •Void function_a (char*, int, short*);
- •Int *pi; /* вказівник-змінна на дані типу int */
- •3. Ініціалізація вказівника
- •4. Розіменування та присвоєння
- •5. Void-вказівник
- •6. Операція пересування вказівника
- •7. Використання вказівників з модифікатором const
- •8. Деактивації дії модифікатора
- •9. Подвійний вказівник
- •10. Вказівники і масиви
- •11. Доступ до ділянок динамічної пам'яті
- •12. Звільнення пам'яті
- •8. Операції з вказівниками
- •Int I, *pi; /* pi –змінна-вказівник */
- •13. Динамічні масиви
- •11. Посилання
- •Лабораторный практикум
- •Вопросы без ответов
- •3 Основні операції над вказівниками
- •4 Багаторівнева непряма адресація
- •5 Операції над вказівниками
- •Void main ()
- •Void main()
- •6 Проблеми, пов'язані з вказівниками
- •Int *х; /* змінній-покажчику 'х' виділена оп, але 'х' не містить значення адреси оп для змінної */
- •Int *х; /* х - ім'я покажчика, він одержав оп*/
- •Void main ()
- •9 Масиви
- •1.9.1 Основні поняття
- •Int а[5]; /* оголошення зовнішнього масиву */ main ()
- •9.2 Оголошення та звертання в одновимірних масивах
- •9.3 Оголошення та звертання до багатовимірних масивів
- •Int а[3][4]; /* а - вказівник-константа */
- •10 Масиви покажчиків
- •10.1 Робота з великими масивами
- •Void main()
- •Int *p[200], I, j; clrscr() ;
- •10.2 Вільні масиви та покажчики
- •11 Символьні рядки
- •11.1 Основні відомості про представлення рядків
- •11.2 Функції роботи з рядками
- •1. Функції введення рядків.
- •2. Функції виведення рядків.
- •14 Лекція №14
- •14.1 Вказівники Лекція № 2 - Вказівники та посилання
- •1.2.1. Вказівники
- •6. Вказівники і масиви
- •6.1. Вказівники і адреси
- •6.2. Вказівники і аргументи функцій
- •6.3. Вказівники і масиви
- •6.4. Адресна арифметика
- •6.5. Вказівники символів і функції
- •6.6. Вказівники – не цілі значення
- •6.7. Багатовимірні масиви
- •6.8. Масиви вказівників (вказівники на вказівники)
- •6.9. Ініціалізація масивів вказівників
- •6.10. Вказівники і багатовимірні масиви
- •6.11. Командний рядок аргументів
- •6.12. Вказівники на функції
- •Посібник для початківця про вказівники
- •6. Вказівники і структуровані програмні змінні
- •9. Вказівники типу far
- •10. Вказівники і динамічні змінні (керування пам'яттю)
- •9. Вказівники типу far
- •10. Вказівники і динамічні змінні (керування пам'яттю)
- •8. Вказівники і динамічні змінні (керування пам'яттю)
- •Void* operator new(size_t t)
- •Void operator delete(void* p)
- •Void main()
8. Вказівники і динамічні змінні (керування пам'яттю)
Оператор new для отриманя пам’яті викликає функцію
extern void* _new (long);
Параметр задає розмір пам’яті в байтах. Якщо new()не зможе знайти необхідну кількість вільних бійтів, то вона поверне нуль.
Оператор delete для звільнення пам’яті викликає функцію
extern void _delete (void*);
Результат виклику _delete() для вказівника, який не був ініціалізований через _new() є не визначеним. Це стосується також повторного виклику _delete() для одного і того ж вказівника. Проте знищення за допомогою _delete() вказівника із значенням нуль є безпечною операцією.
Важливою перевагою операторів new, delete, delete[] над функцями С є те, що С++ дозволяє визначати нові версії операторів new, delete i delete[], наприклад
Приклад 2
# include <iostream>
Void* operator new(size_t t)
{
std::cout <<"AAAAA";
return NULL;
}
Void operator delete(void* p)
{
std::cout <<"BBBBB";
}
main()
{
int *k;
k = new int;
delete k;
}
Прикл. 1.2.2 ілюструє ще одну можливість С++, яка називається перевантаженням функцій та операторів. Про перевантаження детальніше мова ведеться в розділах 3 та __.
Принципову відмінність між оператором new i функцією malloc() ілюструє наступний приклад
Приклад 3
# include <alloc.h>
Void main()
{
//буде повернено ненульовий вказівник
int* i=new int[0];
// буде повернено нульовий вказівник
int* j=(int*) malloc(0);
}
З прикл. 3 можна побачити, що використання new може привести до того, що буде виділено ненульовий вказівник при запиті нуля байтів. Це, у свою чергу, призводить до колізіі, оскільки реально для даного програмного об'єкта пам'яті не було виділено. Функція malloc() дає змогу уникнути цієї ситуації. Проте дана функція повертає void* і в С++ треба здійснювати приведення типів ((int*) malloc(0) у прикл. 2).
