МегаПредмет

ПОЗНАВАТЕЛЬНОЕ

Оси и плоскости тела человека Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.


Отёска стен и прирубка косяков Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу.


Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) - В простых моделях рынка спрос и предложение обычно полагают зависящими только от текущей цены на товар.

Специфікатори класу пам'яті





 

У C++ є чотири специфікатори класу пам'яті: auto, register, static, extern.

Специфікатор класу пам'яті може передувати оголошенням змінних і функцій, вказуючи компілятору, як слід зберігати змінні в пам'яті і як діс-тавати доступ до змінних або функцій. Змінні, оголошені із специфікато-рами auto і register, є локальними, а із специфікаторами static і extern – глобальними. Пам'ять для локальної змінної виділяється кожного разу, досягнувши блоку, в якому оголошена змінна, і звільняється після закін-чення виконання блоку. Пам'ять для глобальної змінної виділяється один раз при запуску програми й звільняється, коли робота програми закін-чена.

Вказані чотири специфікатори визначають також зону видимості змінних і функцій, тобто частину програми, в межах якої до іденти-фікатора можна звернутися по імені. На зону видимості змінної й функції впливає місце її оголошення в програмі. Якщо оголошення розташоване поза функцією, рівень оголошення є зовнішнім, якщо ж воно знаходиться в тілі функції – внутрішнім.

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

Змінна, оголошена на зовнішньому рівні, є глобальною і за замовчуванням має клас пам'яті extern. Зовнішнє оголошення може включати ініціалізацію (явну або неявну) або просто бути посиланням на змінну, що ініціалізувалася в іншому місці програми. Наприклад:

 

static int iv; // за замовчуванням неявно присвоюється 0 static int iv=10; // явне присвоюється

 

int ir=20; // явне присвоюється

 

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

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

За допомогою специфікатора extern можна оголосити змінну, яка буде доступна з будь-якого місця програми. Це може бути посилання на змінну, описану в іншому файлі або нижче в тому ж файлі. Остання особливість робить можливим розміщення посилань на змінну до її ініціалізації.

 

Операції

 

C++ включає побітові операції, операції інкрементування й декре-ментування, умовну операцію, операцію кома, операції комбінованого присвоєння.

Побітові операції працюють із змінними як із наборами бітів, а не як із числами. Ці операції використовуються в тих випадках, коли необхідно дістати доступ до окремих біт даних (при виведенні графічних зображень

на екран). Побітові операції застосовуються тільки до цілочисельних значень. На відміну від логічних операцій, з їх допомогою порівнюються не два числа цілком, а окремі їх біти. Основні побітові операції: І (&), АБО

 

(|) і що виключає АБО (^). Сюди можна також зарахувати унарну операцію побітового заперечення (~), яка інвертує значення бітів числа.

 

Операція & записує в біт результату одиницю тільки в тому випадку, якщо обидва порівнюваних біта дорівнюють 1, як показано в такій таблиці:

 

Біт 0 Біт 1 Результат
     
     
     
     
     

Ця операція часто використовується для маскування окремих бітів числа. Наприклад: 0xF1 & 0x 35 = 0x 31.

Операція | записує в біт результату одиницю в тому випадку, якщо хоч би один з порівнюваних бітів дорівнює 1, як показано в такій таблиці:

 

Біт 0 Біт 1 Результат
     
     
     
     
     

 

Ця операція часто застосовується для установки окремих бітів числа. Наприклад: 0x F1 | 0x 35 = 0x F5.

Операція ^ записує в біт результату одиницю в тому випадку, якщо порівнювані біти відрізняються один від одного, як показано в такій таблиці:

 

Біт 0 Біт 1 Результат
     
     
     
     
     

 

Ця операція часто застосовується при виведенні зображень на екран, коли відбувається накладення декількох графічних шарів.

 

Наприклад: 0x F1 ^ 0x 35 = 0x C4.

 

У C++ існує дві операції зсуву: << - зсув ліворуч, >> - зсув праворуч. Дія першої операції полягає в зсуві бітового представлення цілочисельної змінної, вказаної зліва від операції, ліворуч на кількість бітів, задану праворуч від операції. При цьому звільнені молодші біти заповнюються нулями, а відповідна кількість старших бітів втрачається.

 

Зсув беззнакового числа на одну позицію ліворуч із заповненням молодшого розряду нулем еквівалентне множенню числа на 2. Наприклад:

 

unsigned int iv=65; // молодший байт: 01000001

 

iv<<=1; // молодший байт: 10000010

 

cout<<iv; // буде виведене 130

 

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

 

unsigned int iv=10; // молодший байт: 00001010

 

iv>>=1; // молодший байт: 00000101

 

cout<<iv; // буде виведене 5

 

Збільшення (зменшення) значення змінної на 1 дуже часто зустрі-чається в програмах, тому розробники мови С++ передбачили для цих цілей спеціальні операції інкрементування (++) і декрементування (--).

 

Так, замість рядка iv+1, можна ввести рядок iv++ або ++iv.

 

За ситуації, коли операція ++ є єдиною у виразі, не має значення місце її розташування: до імені змінної або після нього. Значення змінної

 

в будь-якому випадку збільшиться на одиницю.

 

У процесі роботи з складними виразами необхідно уважно стежити, коли саме відбувається модифікація змінної. Потрібно розрізняти префіксні й постфіксні операції, які ставляться відповідно до або після імені змінної.

Наприклад, при постфіксному інкрементуванні i++ спочатку повертається значення змінної, після чого воно збільшується на одиницю. З іншого боку, операція префіксного інкрементування ++i вказує, що спочатку слід збільшити значення змінної, а потім повернути його як результат. Наприклад:

k=++ i; // i=4, k=4

 

k=i++; // i=4, k=3

 

k=--i; // i=2, k=2

 

k=i--; // i=2, k=3

 

У C++ представлені всі стандартні арифметичні операції: складання (+), віднімання (–), множення (*), ділення (*/) і ділення по модулю (%). Перші чотири операції не вимагають роз'яснень. Суть операції ділення по модулю:

 

int ia=3, ib=8, id; id=ib % ia; // результат: 2.

При діленні по модулю повертається залишок від операції цілочисельного ділення.

У C++ операція привласнення (=) може входити до складу інших виразів. У результаті виконання операції привласнення повертається значення, привласнене лівому операнду. Наприклад, такий вираз цілком коректний:

iv=8*(iw=5); //iv=40.

 

У даному випадку спочатку змінній iw присвоюється значення 5, після чого це значення помножується на 8, а результат присвоюється змінній iv. Комбіновані операції присвоєння наведені у табл. 2.

 

Таблиця 2





©2015 www.megapredmet.ru Все права принадлежат авторам размещенных материалов.