- •Програмування і алгоритмічні мови Конспект лекцій
- •Луцьк 2004
- •Лекція 1 Основи мови с. Оператори введення та виводу.
- •Імена змінних та типи і розміри даних. Арифметичні та логічні оператори. Оператори присвоєння.
- •Лекція 3 Масиви. Масиви літер.
- •Умовні оператори. Інкриментні та декрементні оператори.
- •Цикл For
- •Лекція 6 Цикли While, Do-while.
- •Препроцесор. Рекурсія.
- •Структури. Масив структур.
- •Основні відомості про функції.
- •Змінні і правила дії областей у функціях
- •Головні файли.
- •Масиви в якості аргументів функції.
- •Структури в якості аргументів функції
- •Вказівники і адреси
- •Масиви вказівників
- •Вказівники на структуру
- •Лекція 17 Використання вказівників у якості аргументів функцій
- •Лекція 18 Доступ до файлів
- •Методичне видання
- •“Автоматизоване управління технологічними процесами”
- •Тир.50 прим. Зам.1516
- •43018, М.Луцьк, вул. Львівська, 75
Масиви вказівників
У мові Сі елементи масивів можуть мати будь-який тип, і, зокрема, можуть бути вказівниками на будь-який тип. Розглянемо кілька прикладів з використанням вказівників.
Наступні оголошення змінних
int a[]={10,11,12,13,14,};
int *p[]={a, a+1, a+2, a+2, a+3, a+4};
int **pp=p;
породжують програмні об'єкти, представлені на схемі рис.1.
|
pp |
|
||||
|
||||||
P |
|
. |
. |
. |
. |
. |
|
|
|
|
|
|
|
A |
|
11 |
12 |
13 |
14 |
15 |
Рис.1. Схема розміщення змінних при оголошенні. |
||||||
При виконанні операції pp-p одержимо нульове значення, тому що посилання pp і p рівні і вказують на початковий елемент масиву вказівників, зв'язаного з вказівником p ( на елемент p[0]).
Після виконання операції pp+=2 схема зміниться і прийме вид, зображений на рис.2.
|
pp |
|
||||||
|
||||||||
P |
|
. |
. |
. |
. |
. |
|
|
|
|
|
|
|
|
|
|
|
A |
|
10 |
11 |
12 |
13 |
14 |
|
|
Рис.2. Схема розміщення змінних після виконання операції pp+=2. |
|
|
||||||
Результатом виконання вирахування pp-p буде 2, тому що значення pp є адреса третього елемента масиву p. Посилання *pp-a теж дає значення 2, тому що звертання *pp є адреса третього елемента масиву a, а звертання a є адреса початкового елемента масиву a. При звертанні за допомогою посилання **pp одержимо 12 - це значення третього елемента масиву a. Посилання *pp++ дасть значення четвертого елемента масиву p тобто адреса четвертого елемента масиву a.
Якщо вважати, що pp=p, то звертання *++pp це значення першого елемента масиву a (тобто значення 11), операція ++*pp змінить уміст вказівника p[0], таким чином, що він стане рівним значенню адреси елемента a[1].
Складні звертання розкриваються зсередини. Наприклад звертання *(++(*pp)) можна розбити на наступні дії: *pp дає значення початкового елемента масиву p[0], далі це значення інкрементується ++(*p) у результаті чого вказівник p[0] стане рівним значенню адреси елемента a[1], і остання дія це вибірка значень по отриманій адресі, тобто значення 11.
Лекція 16
