ТОП 10:

Локальні і глобальні змінні.



У С++ використовуються локальні і глобальні змінні.

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

Змінна є глобальною в тому випадку, якщо вона визначена поза функцією. Звичайно глобальні змінні визначаються вище функції main().

Всі локальні змінні зникають, коли той блок, у якому вони визначені, завершується.

Глобальні змінні (видимі) доступні від точки їхній визначення до кінця файла. Тому якщо ви визначаєте глобальну змінну, то можете використовувати в будь-якому місці програми нижче її визначення (і не важливо, скільки функцій йде далі).

 

Void main()

{

int i, b // локальні змінні

}

 

int g, h // глобальні змінні

Void main()

{

}

 

Приклад:

 

#include <iostream.h>

#include <iomanip.h>

float z=10; // глобальна Змінна

 

void aa(void)

{

int j=5;

cout << "\n" << j << " " << z;

z++;

}

 

int i=20; // глобальна змінна

 

Void main()

{

float p=30; z++;

cout << z << " " << i << " " << p;

aa();

cout<< "\n" << z;

}

 

Виведення

 

11 20 30

5 11

 

Локальна змінна може “жити” тільки в межах блоку.

 

#include <iostream.h>

 

Void main()

{

int i;

i=10;

{

int i;

i=20;

cout << i << " " << i << "\n";

// Виведення 20 20

{

i=30;

cout <<i<< "\n"; // Виведення 30

}

cout << i<< "\n"; // Виведення 30

}

cout << i; // Виведення 10

}

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

Приклад:

 

#include <iostream.h>

 

Void cc(int k)

{

float t = 12.5;

cout << (t*float(k)) << “\n”;

}

 

void main() //Результат при zz = 3 дорівнює 37.5

{

int zz;

cin >> zz;

cc(zz);

}

Автоматичні і статичні змінні.

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

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

Локальні статичні змінні не видаляються після завершення функції. Для оголошення статичних змінних використовують ключове слово static. Ініціалізація статичних змінних відбувається при першому виконанні функції. Якщо статична змінна не ініціалізується при першому виклику функції, то C++ привласнює їй 0 (нульове) значення.

Приклад:

 

#include <iostream.h>

 

Void y(int i)

{

static int total = 10; //Рядок

int a;

a = i*3;

total += a;

cout << “ ” << total;

}

 

 

Void main()

{

int ctr;

for(ctr = 0; ctr < 2; ctr++)

{

y(ctr);

}

}

 

Виведення: 10 13

Якщо рядок static int total = 10; замінити рядком static int total; тоді результат: 0 3

Передача значень

Передача змінних у функцію виконується:

– за значенням (передача копіюванням);

– за адресою (передача по посиланню).

При передачі за значенням копія значення змінної передається функції, що приймає (рис. 2.).

По умовчанню всі параметри передаються за значенням, крім випадків передачі масивів. Масиви завжди передаються за адресою.

 

Рис.2. Передача змінної i за значенням.

Якщо приймаюча функція змінює змінну, що була передана в її за адресою, то змінна змінюється й у функції, що викликається.

Всі змінні розміщаються в ОЗП за адресами.

Приклад:

 

int i = 4;

char ar[2] = {’A’,’B’};

 

 

Ім’я змінної Пам’ять Адреса
i
ar[0] A
ar[1] B

 

Приклад:

 

#include <iostream.h>

#include <string.h>

 

void t(char c[4])

{

cout << c << “\n”;

strcpy(c,”USA”);

return;

}

 

Void main()

{

char n[4] = “ABC”;

t(n);

cout << n << “\n”;

}

 

Результат

 

АВС

USA

 

Для передачі за адресою даних які не є масивом, потрібно зробити таке:

1. Перед змінною у функції, що викликає, поставити символ амперсант (&);

2. Перед кожним використанням змінної у функції, що приймає, поставити символ (*).

Приклад:

 

#include <iostream.h>

 

void dd(int *t)

{

*t = 100;

return;

}

 

Void main()

{

int i = 200;

dd(&i);

cout << i;

}

 

Виведення: 100.

 







Последнее изменение этой страницы: 2017-02-10; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 34.231.21.160 (0.01 с.)