Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекція 4 (Покажчики).docx
Скачиваний:
20
Добавлен:
16.05.2015
Размер:
86.31 Кб
Скачать

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);

Використання покажчиків часто пов'язано з використанням масивів різних типів. Кожний з типів даних масивів має свої особливості. Тому далі розглянемо властивості покажчиків для роботи з масивами.