Слайд 2
Форма оголошення наступна:
тип * ім’я вказівника ;
де тип -
найменування типу змінної, адресу якої буде
містити змінна-вказівник (на яку він буде вказувати).
Вказівник містить адресу першого байту змінної визначеного
типу. Тип змінної, що адресується, і на яку посилається
вказівник, визначає об'єм ОП, що виділяється змінній, та
зв'язаному з нею вказівнику.
Приклад:
char *pc; float *pf;
int ml [5]; /* - ім'я масиву на 5 значень типу int;
ml - покажчик-константа*/
Слайд 3
Константа NULL зі стандартного файлу stdio.h
призначена для ініціалізації вказівників
нульовим
(незайнятим) значенням адреси.
Базові операції:
Унарні операції & та * :
& ім'я змінної - одержання адреси. Визначає
адресу розміщення значення змінної визначеного типу;
* ім'я-вказівника - отримання значення визначеного
типу за вказаною адресою. Визначає вміст змінної,
розміщеної за адресою, що міститься у даному покажчику.
Це – непряма адресація ( інші назви - "зняття значення за
вказівником" або "розіменування" ).
Слайд 4
Оператор присвоювання значення адреси вказівнику :
Ім'я_змінної_вказівник = & ім'я змінної;
Наприклад:
int i, *pi; /* pi -змінна вказівник*/
pi = &i; /* pi одержує значення адреси 'i' */
Одне з основних співвідношень при роботі з
вказівниками – це симетричність операцій адресації та
непрямої адресації. Вона полягає в тому, що:
*&х == х,
тобто вміст за адресою змінної х є значення х.
Слайд 5
Над вказівниками можна виконувати всі операції
порівняння. Приклад:
int *pc,
*pnew;
if ( pc==pnew ) pc=NULL;
До значення вказівника можна додавати (чи віднімати )
довільне ціле число: p=p + k . Результатом буде
збільшена на k*sizeof (базовий тип вказівника p ) нова
адреса. Величина, яка додається до значення вказівника
(чи віднімається) є кратною розміру об’єкта.
Слайд 6Нетипізовані вказівники
Оголошуються void *p;
Сумісний з усіма вказівниками програми та адресами
усіх
об’єктів. Можна присвоювати значення void –вказівників
вказівникам з довільним типом і навпаки.
Застосовують для оголошення параметрів функцій, що
можуть набувати значення адрес об’єктів різних типів,
а також щоб забезпечити можливість повернення з функції
адреси неозначеного об’єкта.
Слайд 7
Бібліотечна функція malloc ( ), яка виділяє в динамічній
пам’яті
ділянки заданого обсягу, має тип результату
void * ( повертає адресу першого байта виділеної
ділянки), що дає змогу використовувати її для
розташування в пам’яті об’єктів різних типів
Приклад
char *pst ;
double *par;
pst = malloc ( 300 );
par = malloc ( n * sizeof(double) );
Слайд 8
Вказівник pst отримає адресу першого байта ділянки, а
вказівник par
– адресу першого байта першого елемента
динамічного масиву з n даних, що мають тип double. Можна
виконувати присвоєння
*pst = ‘x’ ;
*(par + 3) = 14.7 ;
Першим символом рядка, на який вказує pst , стане символ
‘x’, а константу 14.7 буде записано як четвертий елемент
масиву дійсних чисел.
Хоча значення нетипізованого вказівника можна
присвоювати довільному іншому вказівникові,
рекомендують застосовувати операцію явного перетворення
типу ( явне перетворення обов’язкове для мови С++)