Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л.3_Базовые_и_производные_типы.doc
Скачиваний:
12
Добавлен:
04.11.2018
Размер:
327 Кб
Скачать
☆

Примеры использования переменных разных классов памяти

1.

//файл my_main.cpp

#include <iostream.h>

int a; //определение глобальной переменной a static long li; //определение статической глобальной переменной li int main ()

{ int b; // определение локальной переменной b extern int x; //объявление переменной х, определение ее где-то в другом месте static int c; // определение статической локальной переменной с a = 1; //присваивание глобальной переменной а int a; //определение локальной переменной а a = 2; //присваивание локальной переменной а ::a = 3; //присваивание глобальной переменной а //(:: – это операция изменения области видимости cout << a << endl; //вывод локальной переменной

cout << ::a << "\n"; //вывод глобальной переменной

return 0;

}

2.

//файл my_main_1.cpp

#include <stdio.h>

int i=0; // глобальная переменная i определена в файле со значением 1

void main() { auto int i=1; //локальная переменная i определена в функции main со значением 1 printf (”%d”, i); // 1 { int i=2; // локальная переменная i определена в блоке { } со значением 2 printf (%d”, i); // 2 { i +=1; // в блоке { } действует определение i из объемлющего блока { } printf (”%d”, i); // 3 } printf (”%d”, i); // 3, продолжает действовать определение блока { } } printf (”%d”, i); // 1, в блоке функции main i =1 }

3.

Область действия может превышать область видимости:

{ int i; //автоматическое распределение памяти по умолчанию char ch; // int i и char ch в области действия блока { } и видимы i=3; …… { double i; // double i в области действия блока { } и видима i=3.0; // int i хотя и в области действия блока { }, но скрыта ch=’A’; // char ch в области действия блока { } и видима } i+=1; // int i в области действия блока { }, видима и равна 4 ……. // double i вне области действия блока { } ……. // char ch в области действия блока { }, видима и равна ’A’ } …… // int i и char ch вне области действия блока { }

4.

Пример соотношения областей видимости и действия в проекте на основе двух файлов:

//файл f1.cpp

#include <iostream.h>

int m = 10; //определение глобальной переменной

double x = 100.56; //определение глобальной переменной

extern int func1 (); //объявление функции, определенной в другом файле

extern double func2 (); // объявление функции, определенной в другом файле

int main () {

сout << m << " " << func1() << endl; // 10 100

cout << x << " " << func2() << endl; // 100.56 110.56

return 0; }

//файл f2.cpp

extern int m; // объявление переменной, определенной в другом файле

extern double x; // объявление переменной, определенной в другом файле

int func1 () { return m * m; } //определение функции

double func2 () { return x + m; } //определение функции

5.

Пример изменения 1 в проекте на основе двух файлов:

//файл f12.cpp

#include <iostream.h>

static int m = 10; //определение только в этом файле глобальной статической переменной

double x = 100.56; //определение в файле глобальной переменной

extern int func1 (); //объявление функции, определенной в файле f22.cpp

extern double func2 (); // объявление функции, определенной в файле f22.cpp

int main () {

cout << "main m=" << m << " " << func1() << endl; // 10 4 cout << x << " " << func2() << endl; // 100.56 102.56

return 0; }

//файл f22.cpp

int m=2; // определение в файле глобальной переменной m

extern double x; // объявление переменной х, определенной в файле f12.cpp // extern int i, например, даст ошибку, т.к. i не определено в файле f12.cpp

int func1 () {return m * m; } //определение функции, m=2

double func2 () { return x + m; } // определение функции m=2; x=100.56