Переменные. Переменная в СИ++ - именованная область памяти, в которой хранятся данные определенного типа
Переменная в СИ++ - именованная область памяти, в которой хранятся данные определенного типа. У переменной есть имя и значение. Имя служит для обращения к области памяти, в которой хранится значение. Перед использованием любая переменная должна быть описана. Примеры:
int a; float x;
Общий вид оператора описания:
[класс памяти][const]тип имя [инициализатор];
Класс памяти может принимать значения: auto, extern, static, register. Класс памяти определяет время жизни и область видимости переменной. Если класс памяти не указан явно, то компилятор определяет его исходя из контекста объявления. Время жизни может быть постоянным – в течение выполнения программы или временным – в течение блока. Область видимости – часть текста программы, из которой допустим обычный доступ к переменной. Обычно область видимости совпадает с областью действия. Кроме того случая, когда во внутреннем блоке существует переменная с таким же именем.
Const – показывает, что эту переменную нельзя изменять (именованная константа).
При описании можно присвоить переменной начальное значение (инициализация).
Классы памяти:
auto –автоматическая локальная переменная. Спецификатор auto может быть задан только при определении объектов блока, например, в теле функции. Этим переменным память выделяется при входе в блок и освобождается при выходе из него. Вне блока такие переменные не существуют.
extern – глобальная переменная, она находится в другом месте программы (в другом файле или долее по тексту). Используется для создания переменных, которые доступны во всех файлах программы.
static – статическая переменная, она существует только в пределах того файла, где определена переменная.
register - аналогичны auto, но память под них выделяется в регистрах процессора. Если такой возможности нет, то переменные обрабатываются как auto.
Пример
int a; //глобальная переменная
void main(){
int b;//локальная переменная
extern int x;//переменная х определена в другом месте
static int c;//локальная статическая переменная
a=1;//присваивание глобальной переменной
int a;//локальная переменная а
a=2;//присваивание локальной переменной
::a=3;//присваивание глобальной переменной
}
int x=4;//определение и инициализация х
В примере переменная а определена вне всех блоков. Областью действия переменной а является вся программа, кроме тех строк, где используется локальная переменная а. Переменные b и с – локальные, область их видимости – блок. Время жизни различно: память под b выделяется при входе в блок (т. к. по умолчанию класс памяти auto), освобождается при выходе из него. Переменная с (static) существует, пока работает программа.
Если при определении начальное значение переменным не задается явным образом, то компилятор обнуляет глобальные и статические переменные. Автоматические переменные не инициализируются..
Имя переменной должно быть уникальным в своей области действия.
Описание переменной может быть выполнено или как объявление, или как определение. Объявление содержит информацию о классе памяти и типе переменной, определение вместе с этой информацией дает указание выделить память. В примере extern int x; - объявление, а остальные – определения.
2.4.Знаки операций в Си++
Знаки операций обеспечивают формирование выражений. Выражения состоят из операндов, знаков операций и скобок. Каждый операнд является, в свою очередь, выражением или частным случаем выражения – константой или переменной.
Унарные операции
& | получение адреса операнда |
* | Обращение по адресу (разыменование) |
- | унарный минус, меняет знак арифметического операнда |
~ | поразрядное инвертирование внутреннего двоичного кода целочисленного операнда (побитовое отрицание) |
! | логическое отрицание (НЕ). В качестве логических значений используется 0 - ложь и не 0 - истина, отрицанием 0 будет 1, отрицанием любого ненулевого числа будет 0. |
++ | Увеличение на единицу: префиксная операция - увеличивает операнд до его использования, постфиксная операция увеличивает операнд после его использования. int m=1,n=2; int a=(m++)+n; // a=4,m=2,n=2 int b=m+(++n);//a=3,m=1,n=3 |
- - | уменьшение на единицу: префиксная операция - уменьшает операнд до его использования, постфиксная операция уменьшает операнд после его использования. |
sizeof | вычисление размера (в байтах) для объекта того типа, который имеет операнд имеет две формы sizeof выражение sizeof (тип) Примеры: sizeof(float)//4 sizeof(1.0)//8, т. к. вещественные константы по умолчанию имеют тип double |
Бинарные операции.
Аддитивные:
+ | бинарный плюс (сложение арифметических операндов) |
- | бинарный минус (вычитание арифметических операндов) |
Мультипликативные:
* | умножение операндов арифметического типа |
/ | деление операндов арифметического типа (если операнды целочисленные, то выполняется целочисленное деление) |
% | получение остатка от деления целочисленных операндов |
Операции сдвига (определены только для целочисленных операндов).
Формат выражения с операцией сдвига:
операнд_левый операция_сдвига операнд_правый
<< | сдвиг влево битового представления значения левого целочисленного операнда на количество разрядов, равное значению правого операнда, освободившиеся разряды обнуляются |
>> | сдвиг вправо битового представления значения правого целочисленного операнда на количество разрядов, равное значению правого операнда, освободившиеся разряды обнуляются, если операнд беззнакового типа и заполняются знаковым разрядом, если – знакового |
Поразрядные операции:
& | поразрядная конъюнкция (И) битовых представлений значений целочисленных операндов (бит =1, если соответствующие биты обоих операндов=1) |
| | поразрядная дизъюнкция (ИЛИ) битовых представлений значений целочисленных операндов (бит =1, если соответствующий бит одного из операндов=1) |
^ | поразрядное исключающее ИЛИ битовых представлений значений целочисленных операндов(бит =1, если соответствующий бит только одного из операндов=1) |
Операции сравнения: результатом являются true( не 0) или false(0)
< | меньше, чем |
> | больше, чем |
<= | меньше или равно |
>= | больше или равно |
== | Равно |
!= | не равно |
Логические бинарные операции:
&& | конъюнкция (И) целочисленных операндов или отношений, целочисленный результат ложь(0) или истина(не 0) |
|| | дизъюнкция (ИЛИ) целочисленных операндов или отношений, целочисленный результат ложь(0) или истина(не 0) |
Операции присваивания
=, +=, -=, += и т.д.
Формат операции простого присваивания:
операнд1=операнд2
Леводопустимое значение (L-значение) – выражение, которое адресует некоторый участок памяти, т. е. в него можно занести значение. Это название произошло от операции присваивания, т. к. именно левая часть операции присваивания определяет, в какую область памяти будет занесен результат операции. Переменная – это частный случай леводопустимого выражения.
Условная операция.
В отличие от унарных и бинарных операций в ней используется три операнда.
Выражение1 ? Выражение2 : Выражение3;
Первым вычисляется значение выражения1. Если оно истинно, то вычисляется значение выражения2, которое становится результатом. Если при вычислении выражения1 получится 0, то в качестве результата берется значение выражения3.
Например:
x<0 ? -x : x ; //вычисляется абсолютное значение x.
Операция явного (преобразования) приведения типа.
Существует две формы: каноническая и функциональная:
1) (имя_типа) операнд
2) имя_типа (операнд)
(int)a //каноническая форма
int(a) //функциональная форма
Дата добавления: 2015-09-18; просмотров: 899;