русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Короткі теоретичні відомості


Дата додавання: 2014-11-28; переглядів: 943.


1. Визначення вказівника.Вказівник – це змінна, яка містить адрес іншої змінної. Вказівники призначені для зберігання адрес пам'яті. Використання вказівників допомагає гнучко керувати даними в програмах..

Переваги вказівників включають:

- Операції, які з допомогою вказівників виконуються легше і зручніше.

- Операції, які без вказівників взагалі виконати неможливо.

Коли компілятор обробляє оператор визначення змінної, наприклад, int i=10, то в пам'яті виділяється ділянка відповідно до типу змінної (int=> 4 байти) і записує в цю ділянку значення змінної. Всі звертання до цієї змінної компілятор замінить на адресу області пам'яті, у якій зберігається ця змінна.

Програміст визначає змінні-вказівники для зберігання адресів області пам'яті. Такі змінні називаються вказівниками. Вказівник не є самостійним типом, він завжди пов'язаний з якимсь іншим типом.

При описі змінної компілятор виділяє для неї ділянку пам’яті з унікальною адресою. Компілятор асоціює цю адресу з іменем змінної. Кожний раз, коли в програмі використовується ім’я змінної, автоматично проходить звернення по адресі до відповідного місця пам’яті. Програміст звичайно не знає цієї адреси, але може її визначити.

2. Створення вказівників.Адреса змінної являє собою число. Тому з ним можна поводитися як з звичайним числом. Знаючи адресу даної змінної, можна ввести іншу змінну і помістити в ній адресу першої. Тому описуємо другу змінну, яка зберігає адресу першої.

Нехай змінна dataпоміщена в ділянку пам’яті з адресою, яка позначена змінноюp_data.Ця змінна описана і в неї нічого не занесено. (Рекомендація, яка не обов’язкова, якщо ім’я data,то вказівник .p_data ).

Наступний крок – це помістити адресу змінної data,в зміннуp_data. Оскільки змінна p_dataтепер містить адресу data, вона вказуєна data або є вказівникомна зміннуdata.

3. Опис вказівників.Вказівники є числовими змінними, тому їх треба описати перед використанням. Імена вказівників повинні задовольняти тим умовам, що і інші змінні і бути унікальними. Вказівник не має самостійного типу. Тип вказівника - це тип змінної, на яку вказує вказівник.

Синтаксис опису.

Ім’я типу *ім’я вказівника

Наприклад: int *i; double *f, *ff; char *c;

Вказівник може бути константою або змінною, а також вказувати на константу або змінну.

int i; //ціла змінна

const int ci=1; //ціла константа

int *pi; //вказівник на цілу змінну

const int *pci; //вказівник на цілу константу

Якщо модифікатор const ставиться до вказівника (тобто перебуває між ім'ям вказівника й * ), то він забороняє зміну вказівника, а якщо він перебуває ліворуч від типу (тобто ліворуч від *), то він забороняє зміну значення, на яке вказує вказівник.

Наприклад,

float *p_data, d;

/* *p_data вказівник на змінну типу float, а dзвичайна змінна типу float */

4. Ініціалізація (задання) вказівників. Використання не заданих вказівників дає непередбачені результати і це небезпечно, хоч і можливо. Якщо вказівник не містить адреси змінної, він не приносить ніякої користі. Адреса в вказівнику сама не з’явиться, її треба там помістити з допомогою операції взяття адреси,яка позначається значком амперсанд(&). Операція поєднання & і імені змінної, перед якою він стоїть, повертає адресу даної змінної. Тому вказівник можна ініціалізувати таким оператором присвоєння.

Вказівник = &змінна;

P_data =&data.; /* присвоює адресу data вказівнику P_data*/

Після ініціалізації вказівник вказує на змінну.

Операція посилання по вказівнику (*).

Коли знак цієї операції стоїть перед іменем вказівника, така конструкція позначає змінну, на яку вказує вказівник. Тому змінна і посилання на вказівник цієї змінної є речі ідентичні.

Наприклад, оператори

printf(“%d”, data);

printf(“%d”, *p_data);

дають однаковий ефект. Ці оператори еквівалентні.

5. Вказівники і типи змінних.Змінні різних типів займають різний об’єм пам’яті. Адреси змінної являє собою адресу першого молодшого байта.

Наприклад,

char =12252;

short =90;

float t=1200.

Опис і задання вказівників на ці змінні

char *p_vchar;

short *p_vshor;

float *p_vfloat;

p_vchar=&vchar;

p_vshor=&vshor; /* додаткові оператори */

p_vfloat=&vfloat;

Кожний вказівник рівний адресі першого байта змінної, на яку він вказує. Тому p_vshor=1000, p_vchar=1003, а p_vfloat=1 006.


<== попередня лекція | наступна лекція ==>
Постановка завдання | Індивідуальні завдання


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн