типи покажчиків
Покажчики застосовуються при передачі у функцію параметрів, які ми хочемо змінити, при роботі з масивами, при роботі з динамічною пам'яттю і в ряді інших випадків.
Покажчики найчастіше використовують при роботі з динамічною пам'яттю. Доступ до виділених ділянок динамічної пам'яті, званим динамічними змінними. проводиться тільки через покажчики.
Час життя динамічних змінних - від точки створення до кінця програми або до явного звільнення пам'яті.
В С ++ використовується два способи роботи з динамічною пам'яттю. Перший використовує сімейство функцій malloc і дістався в спадок від С, другий використовує операції new і delete.
Покажчик може вказувати на значення базового, перечислимого типу, структури, об'єднання, функції, покажчика.
Розрізняють два види вказівників - покажчики даних і покажчики функцій, що відрізняються властивостями і набором допустимих операцій. Покажчик не є самостійним типом, він завжди пов'язаний з будь-яким іншим конкретним типом.
<тип> *<имя> [=<инициализатор>];
де тип може бути будь-яким, крім посилання і битового поля, причому тип може бути до цього моменту тільки оголошений, але ще не визначений.
Зірочка відноситься безпосередньо до імені. тому для того, щоб оголосити кілька покажчиків, потрібно ставити її перед ім'ям кожного. Наприклад, в операторі
описуються два покажчика на ціле з іменами a і c. а також ціла змінна b.
Розмір покажчика залежить від моделі пам'яті. Можна визначити покажчик на покажчик, і т.д.
Існують наступні способи ініціалізації покажчика:
· Значення іншого Ініціалізувати покажчика:
· Int b [10]; // Масив · int * t = b; // Присвоєння імені масиву · //. · Void f (int a) *. *> // Визначення функції · void (* pf) (int); // Покажчик на функцію · pf = f; // Присвоєння імені функції
char * vp = (char *) 0xB8000000; // шестнадцатеричная константа
3. Присвоєння пустого значення:
int * suxx = NULL; int * rulez = 0;
· За допомогою операції new:
· Int * n = new int; · int * m = new int (10); · int * q = new int [10];
· За допомогою функції malloc:
· Int * u = (int *) malloc (sizeof (int));
Звільнення пам'яті, виділеної за допомогою операції new. повинно виконуватися за допомогою delete. а пам'яті, виділеної функцією malloc - за допомогою функції free. При цьому змінна-вказівник зберігається і може инициализироваться повторно. Наведені вище динамічні змінні знищуються наступним чином:
delete n; delete m; delete [] q; free (u);
Якщо змінна-вказівник виходить з області своєї дії, відведена під неї пам'ять звільняється. При цьому пам'ять з-під самої динамічної змінної не звільняється.
Можна описати покажчик на тип void і привласнити йому значення покажчика будь-якого типу, а також порівнювати його з будь-якими покажчиками, але перед виконанням будь-яких дій з областю пам'яті, на яку він посилається, потрібно явно перетворити його до конкретного типу.