Similar presentations:
Переменные. Внешние и статические переменные
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 объявлены
как регистровые переменные, поскольку
они используются в цикле. Обычно
регистровые переменные используются
там, где они принесут наибольшую
пользу, то есть в местах, где делается
много ссылок на одну и ту же
переменную. Это важно, поскольку не все
переменные можно оптимизировать по
времени доступа.