- •Покажчик – це змінна для адреси елементу пам'яті. Загальний формат оголошення покажчика має
- •Програма 1. Оголошує покажчик. Видає випадкову інформацію з області пам'яті, яка виділяється під
- •Перша область відводиться під покажчик. Ця область пам'яті має ім'я р. Друга область
- •Програма 2. Оголошує покажчик. Видає інформацію з областей пам'яті p і *p, які
- •Покажчику можна привласнити адресу однотипної змінної, яка оголошена в програмі. Наприклад, після виконання
- •У покажчик можна вводити інформацію з клавіатури, використовуючи директиву введення формату scanf() із
- •Схема пам'яті після оголошення змінних дана на мал. 2.
- •Програма 4. Оголошує покажчик. Для ініціалізації покажчика використовується директива new.
- •Розберемо роботу програми. Схема пам'яті після оголошення змінних дана на мал. 4.
- •Програма 5. Оголошує покажчик. Адреса в покажчик вводиться з клавіатури директивою scanf, в
- •Дана програма спочатку видасть адресу змінної x у форматі процесора. Потім в цьому
- •Покажчик на покажчик – це змінна для адреси покажчика.
- •Тут AY, A, N – випадкові числа у відповідних областях пам'яті. Області з
- •Програма 6. Оголошує покажчик на покажчик. Видає інформацію з областей пам'яті, які
- •Відмітимо, що якщо змінна p визначається, наприклад, кодом int **p, то при виконанні
- •Дана програма показує, що значення в змінній а і адреса першого елементу масиву
- •Програма 8. Програма демонструє способи доступу до елементів масиву через адреси, обчислює суму
- •Якщо задана матриця, наприклад а[n][m], то для неї визначений масив покажчиків а[n]. У
- •Програма 9. Демонструє, що при оголошенні двовимірного масиву, визначений масив покажчиків на перші
- •void main(void)
- •fclose(f1);
- •Під динамічною пам'яттю розуміється пам'ять, яка виділяється під час роботи програми. У мові
- •пам'яті під одновимірний масив.
- •Програма 12. Програма демонструє той факт, що при оголошенні покажчика в програмі можна
- •Програма 13. Для виділення динамічній пам'яті під матрицю
- •Програма 14. Виділяється динамічна пам'ять під матрицю з використанням масиву покажчиків.
Покажчик – це змінна для адреси елементу пам'яті. Загальний формат оголошення покажчика має вигляд:
<тип> *<имя>.
Наприклад, коди (директиви) int *p; float *r; виділяють дві області пам'яті p і r розміром два байти. При цьому змінна p призначена для запису адрес змінних типа int, а змінна r призначена для адрес змінних типа float.
Програма 1. Оголошує покажчик. Видає випадкову інформацію з області пам'яті, яка виділяється під покажчик.
void main()
{ int *p; // Визначається змінна p, яка є покажчиком. clrscr ();
cout << "В змінній p міститься випадкова адреса: “ << p << “\n”;
getch(); }
Після виконання цієї програми на екрані видачі результатів з'явиться наступне повідомлення:
У змінній p міститься випадкова адреса: 0xNNNNNNNN
При оголошенні покажчика, наприклад int *p, виділяється пам'ять розміром два байти, в яких і знаходиться випадкове число A. Це число комп'ютер інтерпретує як адреса пам'яті для запису цілого числа. Число з адреси A, яка записана в покажчику, доступно для комп'ютера. Отже, при оголошенні покажчика користувачеві доступні дві області пам'яті.
Перша область відводиться під покажчик. Ця область пам'яті має ім'я р. Друга область визначається адресою, яка зберігається в покажчику. Ім'я другої області пам'яті – *p. Причому адреса змінної *p рівний A, тобто справедлива тотожність &(*p)?A.
Зауваження 1. Використовувати покажчик, який не ініціалізувався (не задається) програмою, не можна!!!
Доступ до інформації з адрес, які зберігаються в покажчиках типа int *p, float *r і т. д., реалізується, наприклад, директивами:
*p = 6 – в елемент пам'яті, адреса якої зберігається в покажчику p, заслати число 6;
cout << *p – видати на екран інформацію з елементу пам'яті, адреса якої зберігається в покажчику р.
Схема пам'яті до і після виконання коди *p = 6 дана на мал.1.
Мал. 1
Для видачі покажчика на екран або для введення його з клавіатури використовується формат %p.
Програма 2. Оголошує покажчик. Видає інформацію з областей пам'яті p і *p, які доступні програмі.
void main()
{ int *p; clrscr();
printf("У змінній p міститься не контрольований програмою ” “адрес:\n %p" " – шістнадцятиричний запис адреси у форматі \n"
" який визначає процесор. \n\n",p);
printf("У змінній p міститься не контрольований програмою “ “адрес:\n %ld" " – десятковий запис адреси. \n\n", p); printf("У адресі %p міститься випадкове число %d ", p *p);
*p = 10;
printf("\n\nВ адресі %p міститься число %d," " яке визначається програмою. \n", p *p); getch(); }
Після закінчення роботи даної програми на екрані монітора з'явиться вміст змінних p, *p до ініціалізації *p і після її ініціалізації, тобто після виконання коди *p = 10.
Покажчику можна привласнити адресу однотипної змінної, яка оголошена в програмі. Наприклад, після виконання директив
int *p, x; p = &x;
у змінну p засилає адреса змінної x.
Покажчику можна привласнити значення NULL як ознаку непідготовленості покажчика.
Покажчик можна ініціалізувати, використовуючи директиву new. Наприклад, директива p = new int, де p – покажчик, виділяє пам'ять для запису цілого числа. Адреса цієї області пам'яті заноситься в покажчик p і дана пам'ять ставиться під контроль програми.
У покажчик можна вводити інформацію з клавіатури, використовуючи директиву введення формату scanf() із специфікацією %p.
Програма 3. Оголошує покажчик. Покажчику привласнюється адреса однотипної змінної.
void main() { int *p; |
// Визначається змінна p для запису адрес комірок |
|
|
|
// у яких можна заносити цілі числа. |
int x = 222; |
// Виділяє пам'ять для запису цілих чисел. |
|
clrscr(); |
|
|
cout << " |
До ініціалізації покажчика!!!!: \n"; |
cout << "В адресі " << p << " міститься число *p= " << *p << "\n\n";
p = &x; // Ініціалізації покажчика. Покажчику привласнюємо адресу
// змінній, яка оголошена в програмі. cout << "\n\n Після ініціалізації p= &x!!!: \n"; cout << "Адреса x = " << &x << "\n";
cout << " У покажчику p адрес= " << p << “, у якому число= “
<< *p <<" \n";
getch(); }
Схема пам'яті після оголошення змінних дана на мал. 2.
Схема пам'яті після виконання коду p = &x приведена на мал. 3.
Програма 4. Оголошує покажчик. Для ініціалізації покажчика використовується директива new.
void main() |
|
{ int *p; |
// Визначається змінна p для запису адрес вічок |
// у яких можна заносити цілі числа.
clrscr();
cout << " Стан пам'яті до ініціалізації!!!: \n\n";
cout << "В неконтрольованій адресі " << p << " міститься випадкове число " << *p << "\n";
*p = -8; // В неконтрольовану адресу засилаємо число. cout << "\nВ неконтрольованій адресі " << p
<< " міститься визначене програмою число " << *p << " \n"; cout << "Натискуй будь-яку клавишу\n";
getch();
p = new int; // Виділяється пам'ять для запису цілого числа.
cout << "В контрольованій адресі " << p << " міститься випадкове « << " число " << *p << " \n";
cout << "Натискуй будь-яку клавишу\n"; getch();
*p = -777;
cout << "\nВ контрольованій адресі " << p
<< " міститься визначене програмою число " << *p << " \n"; getch(); }
}