Файл: Понятие переменной в программировании. Виды и типы переменных (ПЕРЕМЕННЫЕ).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 17.05.2023

Просмотров: 46

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Далее, дату можно представить в виде набора из трех чисел (число, месяц и год), которые обычно отделяют друг от друга в одной записи точками. Очевидно, что сложение двух дат едва ли можно понять как сложение двух чисел. Набор из нескольких чисел — более сложный объект, чем отдельное число. Однако прибавление к дате некоторого обычного числа вполне разумно интерпретировать как некую новую дату, следующую за исходной спустя заданное число дней. Вычисление этой даты, т. е. представление в виде набора из трех чисел не совсем тривиально (нужно знать, сколько дней в каждом месяце и году). Иначе говоря, операции над датами отличаются от простых арифметических операций над обычными числами, а потому даты также относят к особому типу данных.

В языках программирования существуют так называемые встроенные типы данных. Это общезначимые, наиболее часто употребляемые и достаточно отчетливо интерпретируемые всеми типы. Вместе с тем, современные языки программирования допускают задание программистом своих особенных типов данных. Например, вы можете определить тип данных НЕДЕЛЯ, который содержит 7 элементов, представленных целыми числами (например, 1, 2,...,7) или названиями дней (например, "понедельник", "вторник", ..., "воскресенье").

Во многих языках (например, С и Pascal) переменные и их тип должны быть объявлены прежде, чем они будут использованы в программе. Если при этом переменная изначально была объявлена, например, как числовая, то уже нигде в программе ей нельзя присвоить значение какого-нибудь другого типа. Говорят, что это языки с сильным контролем типов. Однако есть языки со слабым контролем типов (их еще называют языками со свободными или динамическими типами), типичные примеры — JavaScript и РНР. В них тип переменной не фиксируется раз и навсегда в пределах программы, одна и та же переменная в различных фрагментах программы может принимать значения то одного, то другого типа по усмотрению программиста.

3 ТИПЫ ПЕРЕМЕННЫХ

Переменные могут быть глобальными и локальными. Глобальные доступны (т. е. видны) из любого места программы, локальные — только в том блоке программного кода (фрагменте программы), где они были созданы. Типичный пример блока кода — функция. Функция может содержать в своем коде переменные, недоступные (невидимые) из внешней по отношению к ней части программы.

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


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

Область видимости и/или время существования переменной в некоторых языках задаётся классом памяти: Статическая и динамическая типизация переменных.

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

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

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

Динамическая адресация нужна только тогда, когда количество поступающих на хранение данных заранее точно не известно. Такие данные размещают в специальных динамических структурах, тип которой выбирается в соответствии со спецификой задачи и с возможностями выбранной системы программирования. Это может быть стек, куча, очередь и т. п. Даже файл, в том смысле, который заложил Н.Вирт в Паскаль, является динамической структурой.

По зоне видимости различают локальные и глобальные переменные. Первые доступны только конкретной подпрограмме, вторые — всей программе. С распространением модульного и объектного программирования, появились ещё и общие переменные (доступные для определённых уровней иерархии подпрограмм). Область видимости иногда задаётся классом памяти. Ограничение видимости может производиться путём введения пространств имён.


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

По наличию внутренней структуры, переменные могут быть простыми или сложными (составными).

Простые переменные не имеют внутренней структуры, доступной для адресации. Последняя оговорка важна потому, что для компилятора или процессора переменная может быть сколь угодно сложной, но конкретная система (язык) программирования скрывает от программиста её внутреннюю структуру, позволяя адресоваться только «в целом».

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

Следует подчеркнуть относительность такого деления: для разных программ одна и та же переменная может иметь разную структуру. Например, компилятор различает в переменной вещественного типа 4 поля: знаки мантиссы и порядка, плюс их значения, но для программиста, компилирующего свою программу, вещественная переменная — единая ячейка памяти, хранящая вещественное число.

4 ПЕРЕМЕННЫЕ В ЯЗЫКЕ С++

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

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

Хорошим стилем является осмысленное именование переменных. Разрешается использовать строчные и прописные буквы, цифры и символ подчёркивания, который в С++ считается буквой. Первым символом обязательно должна быть буква, в имени переменной не должно быть пробелов. В современных версиях компиляторов длина имени практически не ограничена. Имя переменной не может совпадать с зарезервированными ключевыми словами. Заглавные и строчные буквы в именах переменных различаются, переменные a и A — разные переменные.


Пример зарезервированных ключевых слов:

1 and альтернатива оператору &&

2 and_eq альтернатива оператору &=

3 asm вставить код на ассемблере

4 auto объявить локальную переменную

5 bitand альтернатива оператору bitwise &

6 bitor альтернатива оператору |

7 bool объявить булеву переменную

8 break выйти с цикла

9 case определенная ветка в операторе ветвления switch

10 catch обработать исключение от throw

11 char объявить символьную переменную

12 class объявить класс

13 compl альтернатива оператору ~

14 const объявить неизменяемые данные или функцию, которая не изменяет данных

15 const_cast приведение типа от константной переменной

16 continue пропустить код до конца цикла и начать новую итерацию

17 default вариант по умолчанию в switch

18 delete освобождение памяти, выделенной new

19 do оператор цикла

20 double объявить вещественное число двойной точности

21 dynamic_cast выполнить приведение типов во время выполнения

22 else ветка оператора if, которая выполняется при ложном условии

23 enum создание перечисляемого типа

24 explicit использовать данный конструктор только при полном соответствии типов

25 export позволить разделить объявление и реализацию шаблона

26 extern указание компилятору, что переменная объявлена в другом файле

27 false константа для ложного значения булевой переменной

28 float объявить вещественную переменную

29 for оператор цикла

30 friend разрешить другим функциям доступ к приватным данным класса

31 goto безусловный переход

32 if оператор условия

33 inline оптимизация вызовов для функций (встраиваемые функции)

34 int объявить переменную целого типа

35 long объявить следующий тип длинным

36 mutable перекрыть константность

37 namespace определить новое пространство имен

38 new выделить динамическую память под новую переменную

39 not альтернатива оператору !

40 not_eq альтернатива оператору !=

41 operator создание перегруженных операторов

42 or альтернатива оператору ||

43 or_eq альтернатива оператору |=

44 private объявить приватное поле класса

45 protected объявить защищенное поле класса

46 public объявить общее поле класса

47 register запрос компилятору на оптимизацию переменной по скорости

48 reinterpret_cast изменить тип переменной

49 return возврат из функции

50 short объявить короткое целое

51 signed сделать данный целый тип знаковым

52 sizeof возвратить размер переменной или типа

53 static создать статическую переменную

54 static_cast сделать не полиморфное приведение типов

55 struct определить новую структуру


56 switch оператор ветвления

57 template создать шаблонную функцию

58 this указатель на текущий объект

59 throw выбросить исключение

60 true константа для истинного значения булевой переменной

61 try выполнить код, который может выкинуть исключение

62 typedef создание нового типа с существующего

63 typeid задать описание объекта

64 typename объявить класс или иной новый тип данных

65 union структура, содержащая несколько переменных в одной области памяти

66 unsigned объявить беззнаковое целое

67 using импортировать полностью или частично указанное пространство имен внутрь текущего блока

68 virtual создать виртуальную функцию

69 void объявить функцию или переменную без типа

70 volatile предупреждение компилятору, что переменная может измениться сама

71 wchar_t объявить переменную типа wide-character

72 while оператор цикла

73 xor альтернатива оператору ^

74 xor_eq альтернатива оператору ^=

В языке С++ все переменные должны быть объявлены. Это означает, что, во-первых, в начале каждой программы или функции Вы должны привести список всех используемых переменных, а во-вторых, указать тип каждой из них.

При объявлении переменной компилятор отводит ей место в памяти в зависимости от её типа. Стандартными средствами AVR GCC работает с типами данных char (символьный тип) и int(целочисленный тип).

char - является самым экономным типом. Тип char может быть знаковым и беззнаковым. Обозначается, соответственно, как "signed char" (знаковый тип) и "unsigned char" (беззнаковый тип). Знаковый тип может хранить значения в диапазоне от -128 до +127. Беззнаковый - от 0 до 255. Под переменную типа char отводится 1 байт памяти (8 бит).

Ключевые слова (модификаторы) signed и unsigned указывают, как интерпретируется нулевой бит объявляемой переменной, т.е., если указано ключевое слово unsigned, то нулевой бит интерпретируется как часть числа, в противном случае нулевой бит интерпретируется как знаковый.

Целочисленная величина int может быть short (короткой) или long (длинной).

Ключевое слово (модификатор) short ставится после ключевых слов signed или unsigned. Таким образом, различают следующие типы: signed short int, unsigned short int, signed long int, unsigned long int.

Переменная типа signed short int (знаковая короткая целая) может принимать значения от -32768 до +32767, unsigned short int (беззнаковая короткая целая) - от 0 до 65535. Под каждую из них отводится ровно по два байта памяти (16 бит).

При объявлении переменной типа signed short int ключевые слова signed и short могут быть пропущены, и такой тип переменной может быть объявлен просто int. Допускается и объявление этого типа одним ключевым словом short.