Вказівники Основні відомості про вказівники. При компіляції програми

Скачать презентацию Вказівники Основні відомості про вказівники. При компіляції програми Скачать презентацию Вказівники Основні відомості про вказівники. При компіляції програми

5350-sl_part7.ppt

  • Количество слайдов: 7

>Вказівники       Основні відомості про вказівники.   Вказівники Основні відомості про вказівники. При компіляції програми всі імена змінних будуть перетворені в адреси комірок пам'яті, в яких містяться відповідні значення даних. У командах машинної програми знаходяться машинні адреси розміщення значень змінних. Саме це і є пряма адресація - виклик значення за адресою в команді. Наприклад, в операторі присвоювання: k = j на машинному рівні відбувається копіювання значення з області ОП, що відведена змінній j, в область ОП, яка відведена змінній k. На машинному рівні імена змінних у командах не використовуються, а тільки адреси, сформовані транслятором з використанням імен змінних. Проте програміст не має доступу до цих адрес, якщо він не використовує вказівники (покажчики).

>За допомогою вказівників можна: 1. обробляти одновимірні та багатовимірні масиви, символьні рядки, структури і За допомогою вказівників можна: 1. обробляти одновимірні та багатовимірні масиви, символьні рядки, структури і масиви структур; 2. динамічно створювати нові змінні в процесі виконання програми; 3. обробляти зв'язані структури: стеки, черги, списки, дерева, мережі; 4. передавати функціям адреси фактичних параметрів та адреси функцій в якості параметрів. Використання вказівників вимагає від програміста особливої уваги. Вказівник (або покажчик) – особливий тип даних, значенням якого є адреса певного байта оперативної памяті. Значення покажчика - це беззнакове ціле, воно повідомляє, де розміщена змінна, і нічого не говорить про саму змінну.

>Вказівники можуть бути:   -  константними, зберігають незмінну адресу ділянки ОП (такими Вказівники можуть бути: - константними, зберігають незмінну адресу ділянки ОП (такими є імена масивів і символьних рядків); - змінними, їм можна надавати значення адрес різних ділянок ОП. Оголошення вказівників. Змінна типу вказівник оголошується подібно звичайним змінним із застосуванням унарного символу "*". Форма оголошення наступна: тип * ім’я вказівника ; де тип - найменування типу змінної, адресу якої буде містити змінна-вказівник (на яку він буде вказувати). Вказівник містить адресу першого байту змінної визначеного типу. Тип змінної, що адресується, і на яку посилається вказівник, визначає об'єм ОП, що виділяється змінній, та зв'язаному з нею вказівнику.

>Приклад:            char Приклад: char *pc; float *pf; int ml [5]; /* - ім'я масиву на 5 значень типу int; ml - покажчик-константа*/ Константа NULL зі стандартного файлу stdio.h призначена для ініціалізації вказівників нульовим (незайнятим) значенням адреси. Базові операції. Унарні операції & та * . Призначення цих операцій: & ім'я змінної - одержання адреси; визначає адресу розміщення значення змінної визначеного типу; * ім'я-вказівника - отримання значення визначеного типу за вказаною адресою; визначає вміст змінної, розміщеної за адресою, що міститься у даному покажчику; це - непряма адресація (інші назви - "зняття значення за вказівником" або "розіменування" ).

>Оператор присвоювання значення адреси вказівнику має вигляд:       Оператор присвоювання значення адреси вказівнику має вигляд: Ім'я_змінної_вказівник = & ім'я змінної; int i, *pi; /* pi -змінна вказівник*/ pi = &i; /* pi одержує значення адреси 'i' */ Операція & - визначення адреси змінної повертає адресу ОП свого операнда. Операндом операції & повинне бути ім'я змінної того ж типу, для якого визначений вказівник лівої частини оператора присвоювання, що одержує значення цієї адреси. Операнд операції * обов'язково повинен бути типу вказівник. Результат операції * - це значення, на яке вказує (адресує, посилається) операнд. Тип результату - це тип, визначений при оголошенні вказівника. i= *pi; /* 'i' одержує значення, розташоване за адресою, що міститься в покажчику 'pi' */

>Одне з основних співвідношень при роботі з вказівниками - це симетричність операцій адресації та Одне з основних співвідношень при роботі з вказівниками - це симетричність операцій адресації та непрямої адресації. Вона полягає в тому, що: *&х == х, тобто вміст за адресою змінної х є значення х. Адресна арифметика. Над вказівниками можна виконувати всі операції порівняння. Приклад: int *pc, *pnew; if ( pc==pnew ) pc=NULL; Виконання операцій <, <=, >, >= доцільно в випадку, коли вказівники посилаються на елементи одного масиву.

>До значення вказівника можна додавати (чи віднімати ) довільне ціле число:   p=p До значення вказівника можна додавати (чи віднімати ) довільне ціле число: p=p + k . Результатом буде збільшена на k*sizeof (базовий тип вказівника p ) нова адреса. Величина, яка додається до значення вказівника (чи віднімається) є кратною розміру об’єкта. Можна використовувати інкремент p++ декремент p-- комбіноване присвоєння p+=10 . Нетипізовані вказівники: void *p; Сумісний з усіма вказівниками програми та адресами усіх об’єктів.