Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРОГРАМУВАННЯ_FULL.docx
Скачиваний:
6
Добавлен:
18.09.2019
Размер:
112.09 Кб
Скачать

48. Дії над вказівниками

Приклад : Дії над вказівниками

int a=5;

int *p=&a, *p2, *p2; p2=p1=p;

++p1; p2+=2;

cout<<“a=”<<a;

cout<<” p=”<<*p<<” p=”<<p<<” p1=”<<p1<<” p2=”<<p2;

Результат виконання:

a=5, *p=5, p=FFC8, p1=FFCC, p2=FFD0.

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

З арифметичних операцій між вказівниками дозволена лише операція віднімання.

Різницею двох вказівників одного типу є відстань між двома областями пам’яті, кратна довжині (в байтах) об’єкта того типу, якому відповідає вказівник. Різниця однотипних вказівників, що адресують суміжні об’єкти, за абсолютною величиною рівна одиниці. Адреси змінних позначаються цілочисельними 16-ковими константами.

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

До вказівника дозволено додавати і віднімати цілочисельну константу (k). При цьому він пересувається між ділянками пам’яті на величину k*(sizeof(type)).

49. Директива # include дає вказівку компілятору читати ще один вихідний файл - на додаток до того файлу, в якому знаходиться сама ця директива. Ім'я вихідного файлу повинна бути укладена в подвійні лапки або в кутові дужки. Наприклад, обидві директиви

# Include "stdio.h"

# Include <stdio.h>

дають компілятору вказівку читати і компілювати заголовок для бібліотечних функцій системи введення / виводу.

Файли, імена яких знаходяться в директивах # include, можуть в свою чергу містити інші директиви # include. Вони називаються вкладеними директивами # include. Кількість допустимих рівнів вкладеності у різних компіляторів може бути різним. Однак у стандарті С89 передбачено, що компілятори повинні допускати не менше 8 таких рівнів. А в стандарті С99 передбачена підтримка не менше 15 рівнів вкладеності.

Спосіб пошуку файлу залежить від того, укладено чи його ім'я в подвійні лапки або ж в кутові дужки. Якщо ім'я укладено в кутові дужки, то пошук файлу проводиться тим способом, який визначений в компіляторі. Часто це означає пошук певного каталогу, спеціально призначеного для зберігання таких файлів. Якщо ім'я укладено в лапки, то пошук файлу проводиться іншим способом. У багатьох компіляторах це означає пошук файлу в поточному робочому каталозі. Якщо ж файл не знайдений, то пошук повторюється вже так, як ніби ім'я файлу укладено в кутові дужки.

defіnе- це директи а виконує заміну макро- константи, вказаної після слова define, на текст підстановки, що записується після імені макроконстанти. Заміна виконується в усьому тексті програми, починаючи з рядка, наступного за даною директивою. Зокрема, в наведеній програмі всі лексеми N будуть замінені константою 20, а лексеми DELTA_TC - константою 1.

Заміни, які виконує директива #define, у літературі іазивають макропідста­новками, макрозамінами або макророзширеннями. Саму ж лексему, яка замінюється заданим текстом підстановки, називають іменованою константою, макроконстантою або просто макросом. Детально особливості виконання м; ропідстановок розглянуті в розділі 17, зараз зупинимось тільки на декількох момент

застосування макроконстант дає дві істотні переваги: по-перше, зростає наочність програми, оскільки ім'я макроса несе інформацію про пр значення даної константи (у нашому прикладі DELTA_TC - крок зміни значення ;мператури за Цельсієм);