2. Локальні і глобальні змінні
Всі змінні, які використовуються в програмі, можна розділити на дві групи: локальні і глобальні. Локальні змінні – це змінні, які визначаються усередині функції і використовуються лише усередині функції.
У мові C/C++ локальні змінні можна визначати усередині блоку програми. Блок програми – це набір директив (у тому числі і опис змінних), які поміщені у фігурні дужки. Локальні змінні створюються при вході в блок і ліквідовуються при виході. Змінні, які оголошені в одному блоці, не мають жодного відношення до змінних іншого блоку навіть в разі збігу імен.
Наприклад:
void main()
{ .
// 1-й блок.
{
int x, y, z;
...
}
// 2-й блок.
{
int x, y, z;
...
}
}
Змінні x, y, z першого блоку ніяк не пов'язані із змінними x, y, z другого блоку. Це в принципі різні області пам'яті. Параметри, які перераховуються в заголовку функції, відносяться до локальних змінних.
Глобальні змінні – це ті змінні, які оголошуються поза функцією (перед заголовком функції або блоку програми). Глобальні змінні можна використовувати в будь-якій директиві, незалежно від того, в якій функції або в якому блоці ця директива використовується.
Програма fun_5
float ymn(float x, float y); // Прототип функції ymn().
int w= -10;
void main()
{ cout << “До входу в 1-й блок w= “ << w << “\n”;
// 1-й блок.
{ int x = 2, y = 5, z = 3;
w = x * y + z;
}
cout << “Після виходу з 1-го блоку w= “ << w << “\n”;
// 2-й блок.
{ int x = 5, y = 7, z = 2;
w= (x + y) * z; } cout << << “Після виходу з 2-го блоку w = “ << w << “\n”;
cout << “Після звернення до функції ymn = “ << ymn(10,10) << “\n”;
cout << “Після звернення до функції w = “ << w << “\n”;
getch();
}
float ymn(float x, float в) // Функція визначає добуток 2-х чисел.
{ float z;
z = y * x + w;
w = 500;
return z; }
Після виконання програми на екрані з'явиться наступна інформація:
До входу в 1-й блок w = -10
Після виходу з 1-го блоку w = 13
Після виходу з 2-го блоку w = 70
Після звернення до функції ymn = 170
Після звернення до функції w = 500
Тут слід звернути увагу на те, що в головній програмі і у функції ymn() змінна w не оголошується, проте і в директивах головної програми, і в директивах функції змінна w використовується.
Зауваження 3. Локальні змінні мають пріоритет перед глобальними змінними. Це означає наступне. Якщо імена глобальною і локальною змінних збіглися, то ці змінні між собою не зв'язані і визначають різні області пам'яті. Для виклику функції (як вже наголошувалося вище) вистачає там, де це необхідно, записати директиву, в яку входить ім'я функції із списком параметрів.
Наприклад, директива
cout << “2.5*2= “<< ymn(2.5,2);
виводить на екран результат множення числа 2.5 на 2:
2.5*2= 5
Директива
r = 7*ymn(3.5,2);
у змінну r засилає значення множення числа 7 на результат, який обчислюється функцією ymn() для чисел 3.5 і 2.
3. Зона дії функції
Кожна функція, у тому числі і головна програма main(), є блоком, в який входять код програми і дані. Взагалі кажучи, цей блок закритий і недоступний для інших функцій, якщо лише в самому блоці не відбувається виклик цих функцій. Іншими словами, на дані, які визначені в одній функції, не можуть впливати інші функції, оскільки в різних функцій різні зони дії. Але в будь-якій мові є інструменти (правила, механізми), які дозволяють, при необхідності, різним функціям взаємно впливати на області своїх дій. Змінні, які визначаються усередині функції, є локальними. Локальні змінні створюються при зверненні до функції, і при виході з цієї функції вони знищуються, тобто інформація в локальних змінних не зберігається між викликами функції. Виключення складають глобальні змінні і змінні, які оголошуються як static. При використанні глобальних параметрів треба мати на увазі наступне. В разі збігу імен глобальних і локальних змінних пріоритет мають локальні. Зона дії функції в цьому випадку не поширюється на ті глобальні змінні, імена яких збігаються з іменами локальних змінних.