- •Тип [модифікатор] * ім’я-покажчика ;
- •Основні операції над покажчиками
- •Int I, *pi; /* pi - змінна покажчик */
- •Багаторівнева непряма адресація
- •Операції над покажчиками
- •Проблеми, пов'язані з покажчиками
- •Int *х; /* змінній-покажчику 'х' виділена оп, але 'х' не містить значення адреси оп для змінної */
- •Int *х; /* х - ім'я покажчика, він одержав оп */
Int *х; /* змінній-покажчику 'х' виділена оп, але 'х' не містить значення адреси оп для змінної */
*х = 123; /* - груба помилка! */
-
втрата вказівника, тобто значення покажчика через присвоювання йому нового значення до звільнення ОП, яку він адресує;
-
незвільнення ОП, що виділена за допомогою функції malloc().
Виділення пом’яті
Запит на виділення ОП з купи робиться за допомогою функцій calloc() та malloc(). Повернення (звільнення) ОП робиться за допомогою функції free().
ім'я-покажчика = (тип-покажчика) malloc ( об'єм -ОП ) ;
де ім'я-покажчика - ім'я змінної-покажчика, тип-покажчика - тип значення, що повертається функцією malloc;
об'єм-ОП - кількість байтів ОП, що виділяються змінній, яка адресується.
Наприклад:
х = (int *) malloc (sizeof (int) );
При цьому з купи виділяється 2 байти ОП для цілого значення, а отримана адреса його розміщення заноситься в змінну-покажчик х. Значення покажчика гарантовано не збігається з адресами, що використовуються іншими програмами, у тому числі програмами OС. Параметр функції malloc визначає об'єм ОП для цілого значення за допомогою функції sizeof(int). Запис (int *) означає, що адреса, що повертається функцією malloc(), буде розглядатися як покажчик на змінну цілого типу. Це операція приведення типів.
Таким чином, помилки не буде у випадку використання наступних операторів:
Int *х; /* х - ім'я покажчика, він одержав оп */
х = (int *) malloc ( sizeof(int));
*х = 123; /* змінна, на яку вказує 'х', одержала значення 123*/
Повернення (звільнення) ОП у купі виконує функція free(). Її аргументом є ім'я покажчика, що посилається на пам'ять, що звільняється. Наприклад:
free (x);
Використання покажчиків часто пов'язано з використанням масивів різних типів. Кожний з типів даних масивів має свої особливості. Тому далі розглянемо властивості покажчиків для роботи з масивами.