- •1 Основні відомості про вказівники
- •2. Вказівники та посилання
- •Void function_a (char*, int, short*);
- •Int *pi; /* вказівник-змінна на дані типу int */
- •3. Ініціалізація вказівника
- •4. Розіменування та присвоєння
- •5. Void-вказівник
- •6. Операція пересування вказівника
- •7. Використання вказівників з модифікатором const
- •8. Деактивації дії модифікатора
- •9. Подвійний вказівник
- •10. Вказівники і масиви
- •11. Доступ до ділянок динамічної пам'яті
- •12. Звільнення пам'яті
- •8. Операції з вказівниками
- •Int I, *pi; /* pi –змінна-вказівник */
- •13. Динамічні масиви
- •11. Посилання
- •Лабораторный практикум
- •Вопросы без ответов
- •3 Основні операції над вказівниками
- •4 Багаторівнева непряма адресація
- •5 Операції над вказівниками
- •Void main ()
- •Void main()
- •6 Проблеми, пов'язані з вказівниками
- •Int *х; /* змінній-покажчику 'х' виділена оп, але 'х' не містить значення адреси оп для змінної */
- •Int *х; /* х - ім'я покажчика, він одержав оп*/
- •Void main ()
- •9 Масиви
- •1.9.1 Основні поняття
- •Int а[5]; /* оголошення зовнішнього масиву */ main ()
- •9.2 Оголошення та звертання в одновимірних масивах
- •9.3 Оголошення та звертання до багатовимірних масивів
- •Int а[3][4]; /* а - вказівник-константа */
- •10 Масиви покажчиків
- •10.1 Робота з великими масивами
- •Void main()
- •Int *p[200], I, j; clrscr() ;
- •10.2 Вільні масиви та покажчики
- •11 Символьні рядки
- •11.1 Основні відомості про представлення рядків
- •11.2 Функції роботи з рядками
- •1. Функції введення рядків.
- •2. Функції виведення рядків.
- •14 Лекція №14
- •14.1 Вказівники Лекція № 2 - Вказівники та посилання
- •1.2.1. Вказівники
- •6. Вказівники і масиви
- •6.1. Вказівники і адреси
- •6.2. Вказівники і аргументи функцій
- •6.3. Вказівники і масиви
- •6.4. Адресна арифметика
- •6.5. Вказівники символів і функції
- •6.6. Вказівники – не цілі значення
- •6.7. Багатовимірні масиви
- •6.8. Масиви вказівників (вказівники на вказівники)
- •6.9. Ініціалізація масивів вказівників
- •6.10. Вказівники і багатовимірні масиви
- •6.11. Командний рядок аргументів
- •6.12. Вказівники на функції
- •Посібник для початківця про вказівники
- •6. Вказівники і структуровані програмні змінні
- •9. Вказівники типу far
- •10. Вказівники і динамічні змінні (керування пам'яттю)
- •9. Вказівники типу far
- •10. Вказівники і динамічні змінні (керування пам'яттю)
- •8. Вказівники і динамічні змінні (керування пам'яттю)
- •Void* operator new(size_t t)
- •Void operator delete(void* p)
- •Void main()
3 Основні операції над вказівниками
4 Багаторівнева непряма адресація
У мові Сі можна використовувати багаторівневу непряму адресацію, тобто непряму адресацію на 1, 2 і т.д. рівні. При цьому для оголошення і звертання до значень за допомогою покажчиків можна використовувати відповідно кілька символів зірочка: *. Зірочки при оголошенні ніби уточнюють призначення імені змінної, визначаючи рівень непрямої адресації для звертання до значень за допомогою цих покажчиків. Приклад оголошення змінної і покажчиків для багаторівневої непрямої адресації можна привести наступний:
int i = 123 /* де: i - ім'я змінної */
int *pi = &i; /* pi - покажчик на змінну і */
int **ppi = π /* ppi - покажчик на покажчик на змінну pi */
int * * *pppi = &ppi; /* pppi - вказівник на 'вказівник на 'вказівник на змінну ppi' */
Для звертання до значень за допомогою вказівників можна прийняти наступне правило, що жорстко зв'язує форму звертання з оголошенням цих вказівників:
• повна кількість зірочок непрямої адресації, рівна кількості зірочок при оголошенні вказівника, визначає значення змінної;
• зменшення кількості зірочок непрямої адресації додає до імені змінної слово "вказівник", причому цих слів може бути стільки, скільки може бути рівнів непрямої адресації для цих імен вказівників, тобто стільки, скільки зірочок стоїть в оголошенні вказівника.
Наприклад, після оголошення:
int i, *pi=&i;
звертання у виді:
*pi - визначає значення змінної, pi - покажчик на змінну i.
А при звертанні до змінних можна використовувати різну кількість зірочок для різних рівнів адресації:
pi, ppi, pppi - 0-й рівень адресації, пряма адресація;
*pi, *ppi, *pppi - 1-й рівень непрямої адресації
**ppi, **pppi - 2-й рівень непрямої адресації
***pppi - 3-й рівень непрямої адресації
Таким чином, до вказівників 1-го і вище рівнів непрямої адресації можливі звертання і з меншою кількістю зірочок непрямої адресації, аніж задано при оголошенні вказівника. Ці звертання визначають адреси, тобто значення вказівників визначеного рівня адресації. Відповідність між кількістю зірочок при звертанні за допомогою вказівника і призначенням звертання за вказівником для наведеного прикладу ілюструє таблиця 1.12 (де Р.н.а. - рівень непрямої адресації):
Таблиця 1.12. Відповідність між кількістю уточнень (*) і результатом звертання за допомогою вказівника
Звертання |
Результат звертання |
Р.н.а. |
i |
значення змінної i |
1 |
*pi |
значення змінної, на яку вказує pi вказівник на |
1 |
pi |
змінну типу int, значення pi |
0 |
**ppi |
значення змінної типу int |
2 |
*PPi |
вказівник на змінну типу int |
1 |
ppi |
вказівник на "вказівник на змінну типу int', значення вказівника ppi |
0 |
***pppi |
значення змінної типу int; |
3 |
**pppi |
вказівник на змінну типу int |
2 |
*pppi |
вказівник на 'вказівник на змінну типу int' |
1 |
pppi |
вказівник на 'вказівник на 'вказівник на змінну типу int', значення вказівника pppi |
0 |
