34.10M
Category: programmingprogramming

Переменные. Внешние и статические переменные

1.

Переменные

2.

Переменные
Именованная область памяти, к
которой мы имеем доступ из
программы; туда можно помещать
значения и затем извлекать их.

3.

Переменные
Каждая переменная С++ имеет
определенный тип, который
характеризует размер и
расположение этой области
памяти, диапазон значений,
которые она может хранить, и
набор операций, применимых к
этой переменной.

4.

Внешние переменные
Переменная, описанная вне
функции, является внешней.
Внешнюю переменную можно также
описать в функции, которая
использует ее, при помощи
ключевого слова extern.

5.

int errupt;
char coal;
double up;
main( )
{
extern int errupt; /* объявлено, что 3
переменные */
extern char coal; /* являются внешними */
extern double up;

6.

Внешние переменные
Чтобы понять, как внешние переменные
связаны с extern, необходимо знать
разницу между определением и объявлением
переменной. Когда переменная определена,
компилятор выделяет память для этой
переменной и, возможно, также
инициализирует ее содержимое до
некоторого значения. Когда
переменная объявлена, компилятор
требует, чтобы она была определена в
другом месте.

7.

Внешние переменные
Объявление сообщает компилятору, что переменная
с таким именем и типом существует, но
компилятору не нужно выделять для нее память,
так как она выделена в другом месте. Extern
означает "объявить без определения". Другими
словами, это способ явного объявления
переменной или принудительного объявления без
определения.

8.

Внешние переменные
Можно принудительно (явно) определить
переменную. Это делается путем присвоения
переменной значения инициализации. Если
ни extern, ни значение инициализации
отсутствуют, оператор может быть либо
объявлением, либо определением. Компилятор
должен проанализировать модули программы и
принять решение.

9.

Не стоит злоупотреблять данными переменными,
т.к. такой стиль программирования приводит к
программам, связи данных внутри которых не
вполне очевидны. Переменные при этом могут
изменяться неожиданно.

10.

Статические переменные
Статические переменные это переменные, в описании которых
присутствует слово static. Как
правило, статические переменные
описываются вне функций.

11.

Статические переменные
Static - это ключевое слово в
C++, используемое для придания
элементу особых характеристик.
Для статических элементов
выделение памяти происходит
только один раз и существуют эти
элементы до завершения
программы. Хранятся все эти
элементы в специальных сегментах
памяти, которые
называются .data и .bss

12.

Статические переменные
Статические переменные при
использовании внутри функции
инициализируются только один
раз, а затем они сохраняют свое
значение. Они хранятся в
статической области памяти
(.data или .bss), что позволяет
хранить и использовать значение
переменной на протяжении всей
жизни программы.

13.

Давайте рассмотрим две почти одинаковые программы и
их поведение. Отличие в них только в том, что одна
использует статическую переменную, а вторая нет.

14.

#include <iostream>
void counter() {
static int count = 0; //
строка 4
cout << count++;
}
int main() {
for (int i = 0; i < 10; ++i) {
counter();
}
return 0;
}
Вывод программы:
0123456789

15.

#nclude <iostream>
void counter() {
int count = 0; // строка 4
cout << count++;
}
int main() {
for (int i = 0; i < 10; ++i) {
counter();
}
return 0;
}
Вывод программы:
000000000

16.

Если не использовать static , выделение памяти и
инициализация переменной count происходит при каждом
вызове функции counter(), и уничтожается каждый раз,
когда функция завершается. Но если мы сделаем переменную
статической, после инициализации (при первом вызове
функции counter()) область видимости count будет до
конца функции main(), и переменная будет хранить свое
значение между вызовами функции counter().

17.

Внешние статические перем
Можно также описать статические переменные вне
любой функции. Это создаст "внешнюю
статическую" переменную. Разница между внешней
переменной и внешней статической переменной
заключается в области их действия. Обычная
внешняя переменная может использоваться
функциями в любом файле, в то время как внешняя
статическая переменная может использоваться
только функциями того же самого файла, причем
после определения переменной.

18.

#include <stdio.h>
int add(int, int);
static int a = 5;
int main()
{
int c;
printf("%d", add(a, c));
}
int add(int c, int b)
{
b = 5;
c = a + b;
return c;
}

19.

Регистровые переменные
Регистровые переменные это те
же переменные, но используется
ключевое слово register. Это слово
сообщает компилятору, что
данная переменная будет интенсивно
использоваться в приложении, поэтому
ее желательно поместить
в регистр процессора, что увеличит
быстродействие.

20.

int int_pwr (register int m, register int e)
{
register int temp;
temp = 1 ;
for( ; e; e--) temp *= m;
return temp;
}

21.

Регистровые переменные
В данном примере m, e и temp объявлены
как регистровые переменные, поскольку
они используются в цикле. Обычно
регистровые переменные используются
там, где они принесут наибольшую
пользу, то есть в местах, где делается
много ссылок на одну и ту же
переменную. Это важно, поскольку не все
переменные можно оптимизировать по
времени доступа.

22.

Спасибо за внимание!
English     Русский Rules