Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Масиви покажчиків

Читайте также:
  1. Покажчики на багатовимірні масиви.

У мові С елементи масивів можуть мати будь-який тип, і, зокрема, можуть бути покажчиками на будь-який тип. Розглянемо кілька прикладів з використанням покажчиків.

Наступні оголошення перемінних

int a[ ]={10,11,12,13,14,};

int *p[ ]={a, a+1, a+2, a+2, a+3, a+4};

int **pp=p;

породжують програмні об'єкти, представлені на схемі на рис. 9.2.

При виконанні операції pp-p одержимо нульове значення, тому що посилання pp і p рівні і вказують на початковий елемент масиву покажчиків, зв'язаного з покажчиком p (на елемент p[0]).

Після виконання операції pp+=2 схема зміниться і прийме вид, зображений на рис.9.3.

 

  pp  
â
p à . . . . .
  â â â â â
a à 11 12 13 14 15
Рис. 9.2. Схема розміщення змінних при оголошенні

 

  pp  
â
p à . . . . .    
  â â â â â    
a à 10 11 12 13 14    
Рис. 9.3. Схема розміщення змінних після виконання операції 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.

У попередніх прикладах був використаний одномірний масив, розглянемо тепер приклад з багатовимірним масивом і покажчиками:

int a[3][3]={ { 11,12,13 },

{ 21,22,23 },

{ 31,32,33 } };

int *pa[3]={ a,a[1],a[2] };

int *p=a[0];

Доступ до елемента a[0][0] можливо одержати по покажчиках a, p, pa за допомогою наступних посилань: a[0][0], *a, **a[0], *p, **pa, *p[0].

Розглянемо тепер приклад з використанням рядків символів. Оголошення змінних

charc[ ]={ "abs", "dx", "yes", "no" };

char **cp[ ]={ c+3, c+2, c+1, c };

char ***cpp=cp;

КОНТРОЛЬНІ ПИТАННЯ

1. Для чого призначені стандартні функції mallos() і free ()?

2. Які операції можна застосовувати до покажчиків на елементи того самого масиву?

3. Які дії можна робити над покажчиками і цілими?

4. Які дії не можна робити над покажчиками?

5. Що ви знаєте про покажчики на void?


Дата добавления: 2015-07-20; просмотров: 75 | Нарушение авторских прав


Читайте в этой же книге: ТЕОРЕТИЧНА ЧАСТИНА | Завдання 2. | ВАРІАНТИ ЗАВДАНЬ РОБОТИ | Обмінне сортування | Інші методи сортування | ВАРІАНТИ ЗАВДАНЬ РОБОТИ | ТЕОРЕТИЧНА ЧАСТИНА | У двовимірні та навпаки | ВАРІАНТИ ЗАВДАНЬ РОБОТИ | Зв’язок між покажчиками та масивами |
<== предыдущая страница | следующая страница ==>
Покажчики на багатовимірні масиви.| ЗАВДАННЯ ПО ОБРОБЦІ РЯДКІВ

mybiblioteka.su - 2015-2024 год. (0.008 сек.)