Переменные в языке С

Содержание

Слайд 2

ПЕРЕМЕННЫЕ В ЯЗЫКЕ С . Переменная — это именованная область памяти,

ПЕРЕМЕННЫЕ В ЯЗЫКЕ С .

Переменная — это именованная область памяти, в

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

Правила описания переменных Общий вид оператора описания переменных: [класс памяти] [const]

Правила описания переменных

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

[класс памяти] [const] тип имя

[инициализатор];

класс памяти

может принимать одно из значений auto, extern, static и register

модификатор const

показывает, что значение переменной изменять нельзя
такую переменную называют именованной константой, или просто константой

инициализатор

присваивает переменной начальное значение
Инициализатор можно записывать в двух формах
со знаком равенства: = значение,
в круглых скобках: ( значение )

Слайд 4

Константа должна быть инициализирована при объявлении.

Константа должна быть инициализирована при объявлении.

Слайд 5

Правила описания переменных В одном операторе можно описать несколько переменных одного

Правила описания переменных

В одном операторе можно описать несколько переменных одного типа,

разделяя их запятыми

Примеры:

short int а = 1; // целая переменная а
const char С = 'С’; // символьная константа С
char s, sf = 'f’; // инициализация относится только к sf.
char t (54);
float с = 0.22, x(3), sum;

Слайд 6

Если тип инициализирующего значения не совпадает с типом переменной, выполняются преобразования типа.

Если тип инициализирующего значения не совпадает с типом переменной, выполняются преобразования

типа.
Слайд 7

Правила преобразования типов Любые операнды типа char, unsigned char или short

Правила преобразования типов

Любые операнды типа char, unsigned char или short преобразуются

к типу int

char расширяется нулем или знаком в зависимости от умолчания для char
unsigned char расширяется нулем
signed char расширяется знаком
short, unsigned short и enum при преобразовании не изменяются

Затем любые два операнда становятся
либо int, либо float, double или long double

Слайд 8

Правила преобразования типов

Правила преобразования типов

Слайд 9

Область действия идентификатора Описание переменной, кроме типа и класса памяти, явно

Область действия идентификатора

Описание переменной, кроме типа и класса памяти, явно

или по умолчанию задает ее
область действия.

Класс памяти и область действия зависят не только от описания,
но и от места его размещения в тексте программы

Слайд 10

Область действия идентификатора — это часть программы, в которой его можно

Область действия идентификатора —
это часть программы, в которой его можно

использовать для доступа к связанной с ним области памяти.
Слайд 11

Область действия идентификатора В зависимости от области действия переменная может быть

Область действия идентификатора

В зависимости от области действия переменная может быть

локальной или глобальной

Если переменная определена внутри блока, она называется локальной

область ее действия — от точки описания до конца блока, включая все вложенные блоки

Если переменная определена вне любого блока, она называется глобальной

областью ее действия считается файл, в котором она определена, от точки описания до его конца

Слайд 12

Класс памяти определяет время жизни и область видимости программного объекта. Если

Класс памяти определяет время жизни и область видимости программного объекта.
Если класс

памяти не указан явным образом, он определяется компилятором исходя из контекста объявления.
Слайд 13

Класс памяти Время жизни может быть: постоянным - в течение выполнения

Класс памяти

Время жизни может быть:

постоянным - в течение выполнения

программы
временным - в течение выполнения блока
Слайд 14

Класс памяти Областью видимости идентификатора называется часть текста программы, из которой

Класс памяти

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

допустим обычный доступ к связанной с идентификатором областью памяти

Чаще всего область видимости совпадает с областью действия

Исключением является ситуация, когда во вложенном блоке описана переменная с таким же именем

в этом случае внешняя переменная во вложенном блоке невидима, хотя он и входит в ее область действия
тем не менее, к этой переменной, если она глобальная, можно обратиться, используя операцию доступа к области видимости ::

Слайд 15

Класс памяти Для задания класса памяти используются следующие спецификаторы: auto extern static register

Класс памяти

Для задания класса памяти используются следующие спецификаторы:
auto
extern
static
register

Слайд 16

Класс памяти auto автоматическая переменная память под нее выделяется в стеке

Класс памяти

auto
автоматическая переменная
память под нее выделяется в стеке и при

необходимости инициализируется каждый раз при выполнении оператора, содержащего ее определение
освобождение памяти происходит при выходе из блока, в котором описана переменная.
время ее жизни — с момента описания до конца блока

Для глобальных переменных этот спецификатор не используется, а для локальных он принимается по умолчанию, поэтому задавать его явным образом большого смысла не имеет

Слайд 17

Класс памяти extern означает, что переменная определяется в другом месте программы

Класс памяти

extern
означает, что переменная определяется в другом месте программы

другом файле или дальше по тексту)
используется для создания переменных, доступных во всех модулях программы, в которых они объявлены

Если переменная в том же операторе инициализируется, спецификатор extern игнорируется

Слайд 18

Класс памяти static статическая переменная время жизни — постоянное инициализируется один

Класс памяти

static
статическая переменная
время жизни — постоянное
инициализируется один раз при первом

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

Глобальные статические переменные видны только в том модуле, в котором они описаны

Слайд 19

Класс памяти register аналогично auto, но память выделяется по возможности в

Класс памяти

register
аналогично auto, но память выделяется по возможности в регистрах

процессора
если такой возможности у компилятора нет, переменные обрабатываются как auto
Слайд 20

Пример int a; // 1 глобальная переменная а int main(){ int

Пример

int a; // 1 глобальная переменная а
int main(){
int b; //

2 локальная переменная b
extern int x; // 3 переменная х определена в другом месте
static int с; // 4 локальная статическая переменная с
а = 1; // 5 присваивание глобальной переменной
int a; // 6 локальная переменная а
а = 2; // 7 присваивание локальной переменной
::а = 3; // 8 присваивание глобальной переменной
return 0;
}
int x = 4; // 9 определение и инициализация х
Слайд 21

Пример В этом примере глобальная переменная а определена вне всех блоков.

Пример

В этом примере глобальная переменная а определена вне всех блоков.

память под

нее выделяется в сегменте данных в начале работы программы

областью действия является вся программа

область видимости — вся программа, кроме строк 6-8

так как в строке 6 определяется локальная переменная с тем же именем, область действия которой начинается с точки ее описания и заканчивается при выходе из блока

Слайд 22

Пример Переменные b и с — локальные. область их видимости —

Пример

Переменные b и с — локальные.

область их видимости — блок

время жизни

различно:

память под b выделяется в стеке при входе в блок и освобождается при выходе из него
переменная с располагается в сегменте данных и существует все время, пока работает программа

Слайд 23

Если при определении начальное значение переменных явным образом не задается, компилятор

Если при определении начальное значение переменных явным образом не задается,
компилятор

присваивает глобальным и статическим переменным нулевое значение соответствующего типа.
Автоматические переменные не инициализируются.
Слайд 24

Объявление и определение переменной Описание переменной может выполняться в форме объявления

Объявление и определение переменной

Описание переменной может выполняться в форме объявления или

определения

объявление информирует компилятор о типе переменной и классе памяти
определение содержит, кроме этого, указание компилятору выделить память в соответствии с типом переменной

В C большинство объявлений являются одновременно и определениями

в приведенном выше примере только описание 3 является объявлением, но не определением