C++. Понятие переменной. Объявление переменной. Локальные и глобальные переменные. Выделение памяти для переменных. Константы




Понятие переменной. Объявление переменной. Локальные и глобальные переменные. Операция расширения области видимости ::. Выделение памяти для переменных. Константы


Содержание


Поиск на других ресурсах:

1. Что называется переменной?

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

При разработке программы, программист по собственному усмотрению дает имена переменным. Имя переменной есть именем идентификатора. Это имя должно соответствовать синтаксису языка C/C++. Более подробно об именах переменных описывается в теме:

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

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

В языке C/C++ каждая переменная должна иметь собственный тип. Более подробно о типах данных C/C++ описывается в статье:

2. Какой общий вид описания переменной в C/C++?

Общий вид описания переменной:

тип список_переменных;

где

  • тип – тип данных, соответствующий переменным из список_переменных;
  • список_переменных – перечень переменных заданного типа, разделенных запятой.

Переменная может иметь до 1024 символов любого имени.

Пример объявления переменных разных типов.

int a, b, c;
char sym;
bool f_is;
float x, y;
double z;

3. В каких местах программы можно объявлять переменные? Как классифицируются переменные в зависимости от места объявления в программе?

Переменные могут быть объявлены:

  • внутри функций;
  • в определении параметров функций;
  • за пределами всех функций.

В зависимости от места объявления в программе, переменные классифицируются следующим образом:

  • локальные переменные (объявляются внутри функций);
  • формальные параметры (есть параметрами функций);
  • глобальные переменные (объявляются за пределами функций).





4. Что такое локальные переменные? В каких местах программы объявляются локальные переменные?

Локальные переменные – это переменные, которые объявлены (описаны) внутри функций. Доступ к таким переменным имеют только операторы, которые используются в теле функции.

Локальные переменные создаются в момент вызова функции. Как только выполнение функции завершается, локальные переменные уничтожаются.

Пример. Пусть дана функция GetMax3(), определяющая максимальное значение между тремя числами. В функции описывается локальная переменная res. Область действия переменной определена фигурными скобками { }.

...

int GetMax3(int a, int b, int c)
{
    int res; // res - локальная переменная
    res = a;
    if (res<b) res = b;
    if (res<c) res = c;
    return res;
}

...

5. Что означает термин «разрушение переменной»?

Локальные переменные создаются в момент вызова функции. Как только выполнение функции завершается, локальные переменные разрушаются. Термин «разрушение переменной» означает: разрушение переменной в оперативной памяти после завершения функции, в которой эта переменная была объявлена.

6. Что означает термин «формальный параметр»?

Формальный параметр – это переменная, которая есть входным параметром функции. При вызове функции, ей передаются аргументы. Значение этих аргументов копируются в формальные параметры функции в порядке их вызова.

Формальные параметры объявляются после имени функции внутри круглых скобок ( ).

Пример. Пусть даны объявления функции GetMax3(), которая находит максимальное значение между тремя целыми числами.

...

// Объявление функции GetMax3
int GetMax3(int a, int b, int c)
{
    // a, b, c - формальные параметры
    int res; // res - локальная переменная
    res = a;
    if (res<b) res = b;
    if (res<c) res = c;
    return res;
}

...

// Вызов функции GetMax3() из другого программного кода
max = GetMax3(8, 5, 11); // числа 8, 5, 11 есть аргументами функции

...

В данном примере, в функции GetMax3() есть 3 формальных параметра с именами a, b, c. При вызове функции из другого программного кода ей передаются 3 числа (аргумента), которые копируются в формальные параметры. Число 8 копируется в формальный параметр a. Число 5 копируется в формальный параметр b. Число 11 копируется в формальный параметр c.

7. Что такое глобальные переменные? Какое отличие между глобальными и локальными переменными?

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

Глобальная переменная объявляется за пределами всех функций.

Пример. В данном примере объявлена глобальная переменная max и две функции GetMax2() и GetMax3().

...

int max; // max - глобальная переменная

// Объявление функции GetMax2
int GetMax2(int a, int b)
{
    // a, b - формальные параметры
    max = a; // использование глобальной переменной max в функции GetMax2()
    if (max<b) max = b;
    return max;

}

// Объявление функции GetMax3
int GetMax3(int a, int b, int c)
{
    // a, b, c - формальные параметры
    max = a; // использование глобальной переменной max в функции GetMax3()
    if (max<b) max = b;
    if (max<c) max = c;
    return max;
}

8. Примеры объявления переменных разных типов
int a, b, c;
char sym;
bool f_is;
float x, y;
double z;

9. Как выделяется память для переменных целочисленных типов?

При объявлении переменной для нее выделяется память. Размер памяти, которая выделяется, зависит от типа переменной. Размер выделенной памяти влияет на диапазон значений, которые может принимать переменная.

Для переменных целых типов выделяется память соответственно нижеследующим таблицам.

Для 16-разрядной среды.

 

Тип Размер в битах Диапазон значений
int 16 -32768 … 32767
unsigned int 16 0 … 65535
signed int 16

-32768 … 32767

(аналогичен типу int)

short int 16

-32768 … 32767

(аналогичен типу int)

unsigned short int 16

0… 65535

(аналогичен типу unsigned int)

signed short int 16

-32768 … 32767

(аналогичен типу int)

long int 32 -2 147 483 648 … 2 147 483 647
unsigned long int 32 0 … 4 294 967 295
signed long int 32

-2 147 483 648 … 2 147 483 647

(аналогичен типу long int)

 

Для 32-разрядной среды.

Тип Размер в битах Диапазон значений
int 32 -2 147 483 648 … 2 147 483 647
unsigned int 32 0 … 4 294 967 295
signed int 32

-2 147 483 648 … 2 147 483 647

(аналогичен типу int)

short int 16 -32768 … 32767
unsigned short int 16 0 … 65535
signed short int 16 -32768 … 32767
long int 32

-2 147 483 648 … 2 147 483 647

(аналогичен типу int)

unsigned long int 32

0…4 294 967 295

(аналогичен типу unsigned int)

signed long int 32

-2 147 483 648 … 2 147 483 647

(аналогичен типу signed int)

Начиная с версии C++ 11 были введены два новых целочисленных типа данных: long long и unsigned long long. При объявлении переменной одним из этих типов выделяется 64 бита (8 байт) памяти.

Диапазон значений для типа long long

-9223372036854775808 ... 9223372036854775807

Диапазон значений для типа unsigned long long

0 ... 18446744073709551615

10. Как выделяется память для переменных типов с плавающей запятой?

Для типов с плавающей запятой таблица выделенной памяти для переменной имеет вид как показано ниже. Выделение памяти для переменных типов с плавающей запятой не зависит от того, какую разрядность имеет среда (16 или 32 разряда).

Тип Размер в битах Диапазон значений
float 32 3.4E-38 … 3.4E+38
double 64 1.7E-308 … 1.7E+308
long double 80 3.4E-4932 … 3.4E+4932

11. Как выделяется память для переменных символьных (char) типов?

Для переменных символьного типа независимо от среды (16 или 32 разряда) выделяется память на основе следующей таблицы.

Тип Размер в битах Диапазон значений
char 8 -128 … 127
unsigned char 8 0 … 255
signed char 8 -128 … 127

12. Что такое константы в языке программирования C++? Как объявить константу?

Константа – это есть переменная, которая не может изменять своего значения на протяжении всего времени выполнения программы. Значение константе присваивается при ее объявлении. Для объявления константы используется ключевое слово const.

Общий вид объявления константы

const тип имя_константы = константное_значение;

где

  • тип – тип который получает константа;
  • имя_константы – имя, по которому будет осуществляться использование константного значения.

Примеры объявления констант.

const float Pi = 3.1415; // Число Пи
const int Max = 1000; // константа с именем Max
int const Min = 100; // константа с именем Min
const char New_Line = '\n';
const bool YES = true;

13. Доступ к глобальным переменным всередине функций. Операция расширения области видимости :: . Пример

При разработке собственных программ, содержащих глобальные переменные, может возникнуть ситуация, когда в теле функции используется локальная переменная с таким же именем. В этом случае имя локальной переменной перекрывает имя глобальной переменной. При обращении к имени в теле функции принимается ко вниманию локальная переменная (глобальная переменная игнорируется). Если возникла такая ситуация, то для доступа к глобальной переменной можно использовать операцию расширения области видимости, которая обозначается :: .

С помощью операции расширения области видимости :: можно получить доступ не только к переменным, но и к константам и функциям.

Пример.

В примере продемонстрировано:

  • использование локальных и глобальных переменных;
  • использование прототипа функции;
  • использование операции расширения области видимости :: для доступа к глобальной переменной.

 

#include <iostream>
using namespace std;

// Глобальные и локальные переменные. Операция ::

// Объявить глобальную переменную d.
// Эта переменная доступна в обеих функциях: MultGlobal2() и main()
int d = 15;

// Прототип функции, умножающей глобальную переменную d на 2
int MultGlobal2(void);

void main()
{
  // Объявить локальную переменную d в функции main()
  int d;

  // 1. Вывести значение локальной переменной d
  d = 25;

  cout << "Local: d = " << d << endl; // d = 25 - локальная переменная переопределяет глобальную переменную

  // 2. Вывести значение глобальной переменной d,
  //    используется операция :: - расширение области видимости
  cout << "Global: d = " << ::d << endl;

  // 3. Вывести удвоенное значение глобальной переменной d
  cout << "Global: d*2 = " << MultGlobal2() << endl; // d*2 = 30

  // 4. Записать в локальную переменную d новое значение 27
  d = 27;
  cout << "Local: d = " << d << endl;

  // 5. Записать в глобальную переменную d новое значение 68
  ::d = 68;
  cout << "Global: d = " << ::d << endl; // глобальная переменная d = 68

  // 6. Вывести удвоенное значение глобальной переменной ::d
  cout << "Global d * 2 = " << MultGlobal2() << endl; // будет выведено 136
}

// Функция, которая использует значение глобальной переменной d.
// К локальной переменной d в функції main() эта функция доступа не имеет
int MultGlobal2(void)
{
  // здесь доступна глобальная переменная d
  return d * 2;
}

Результат выполнения программы

Local: d = 25
Global: d = 15
Global: d*2 = 30
Local: d = 27
Global: d = 68
Global d * 2 = 136


Связанные темы