Читайте также: |
|
Тема: Написання програм для знаходження вказівників на змінні різних типів
Мета роботи: Навчитись описувати і задавати вказівники; оволодіти основними способами роботи з вказівниками в C- програмах.
1 Короткі теоретичні відомості
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.
2 Індивідуальні завдання
№ вар. | Завдання | |
1. | - Описати і задати змінну varцілого типу. Описати і ініціалізувати вказівник на неї. Вивести на екран значення цієї змінної шляхом звертання до неї по імені і через вказівник. | |
2. | - Описати і задати змінну dataдійсного типу. Описати і ініціалізувати вказівник на неї. Вивести на екран значення цієї змінної шляхом звертання до неї по імені і через вказівник. | |
3. | - Описати і задати значення трьох змінних типу char, short і int. Описати і ініціалізувати вказівники на них. Вивести на екран адреси цих змінних і значення змінних за допомогою операції посилання по вказівнику. | |
4. | - Описати і задати змінну varцілого типу. Описати і ініціалізувати вказівник на неї. Вивести на екран адресу цієї змінної з допомогою операції взяття адреси і самої змінної-вказівника | |
5. | - Описати і задати змінну dataцілого типу. Описати вказівник p_data на цю змінну і задати її адресу. Вивести на екран адресу цієї змінної з допомогою операції взяття адреси і самої змінної-вказівника. | |
6. | - Описати і задати змінну var цілого типу. Описати і ініціалізувати вказівник на неї. Вивести значення цієї змінної шляхом звертання до неї по імені і через вказівник. | |
7. | - Описати і задати значення трьох змінних типу char, short і int. Описати і ініціалізувати вказівники на них. Вивести на екран адреси цих змінних і значення змінних за допомогою операції посилання по вказівнику | |
8. | - Описати і задати змінну data цілого типу. Описати вказівник p_data на цю змінну і задати її адресу. Вивести на екран адресу цієї змінної з допомогою операції взяття адреси і самої змінної-вказівника операція посилання по вказівнику). | |
9. | - Описати і задати змінну data дійсного типу. Описати і ініціалізувати вказівник на неї.. Вивести значення змінної шляхом звертання до неї по імені і через вказівник (операція посилання по вказівнику). | |
10. | - Описати і задати 3 змінні дійсного, цілого і символьного типів. Описати і ініціалізувати вказівники на них. Вивести на екран значення цих змінних шляхом звертання до них по імені і через вказівник (операція посилання по вказівнику). | |
11. | - Описати і задати 2 змінні дійсного і цілого типів. Описати і ініціалізувати вказівники на них. Вивести на екран значення цих змінних шляхом звертання до них по імені і через вказівник (операція посилання по вказівнику). | |
12. | - Описати і задати 2 змінні дійсного і символьного типів. Описати і ініціалізувати вказівники на них. Вивести на екран значення цих змінних шляхом звертання до них по імені і через вказівник (операція посилання по вказівнику). | |
13. | - Описати і задати змінну var цілого типу. Описати і ініціалізувати вказівник на неї. Вивести адресу змінної з допомогою операції взяття адреси і -вказівника | |
14. | - Описати і задати змінну var цілого типу. Описати і ініціалізувати вказівник на неї. Вивести на екран цю змінну шляхом звертання до неї по імені і через вказівник. | |
15. | - Описати і задати змінну data дійсного типу..Описати і ініціалізувати вказівник на неї. Вивести на екран значення цієї змінної шляхом звертання до неї по імені і через вказівник (операція посилання по вказівнику). |
3 Методичні вказівки
1. Уважно прочитати умову задачі з індивідуального завдання. Визначити, що має бути отримано в результаті її розв'язку, які дані для цього потрібно ввести.
2. Використати знання про вказівники, операції над ними.
3. Для вводу й виводу даних використати бібліотеку функцій <stdіo.h>.
4. Ввести текст програми. Звернути увагу на типи даних, що будуть використані в програмі.
5. Запустити програму на компіляцію. У випадку необхідності виправити синтаксичні помилки.
6. Запустити програму на виконання. У випадку необхідності виправити семантичні помилки.
7. Реалізувати програму для різних вхідних даних.
4 Контрольні запитання
1. Який знак операції використовується для одержання адресу змінної?
2. Який знак операції використовується для одержання значення по адресі?
3. Що таке посилання по вказівнику?
4. Що таке вказівник?
5. Які операції можна виконувати над вказівниками.
Дата добавления: 2015-07-17; просмотров: 244 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Постановка завдання | | | Лабораторна робота № 10 |