Файл: Понятие переменной в программировании. Виды и типы переменных (Классификация переменных).pdf
Добавлен: 01.04.2023
Просмотров: 263
Скачиваний: 3
Введение
Переменная это именованная область памяти, в которой могут храниться различные значения. При этом значение переменной во время выполнения программы можно изменить один или несколько раз. Другими словами, содержимое переменной изменяемо, а не фиксировано.
Переменные должны быть объявлены до их использования. В объявлении переменной помимо ее имени необходимо указать, значение какого типа она может хранить данные. Тем самым объявляется тип переменной. Переменные бывают глобальными и локальными, статическими и динамическими, простые и сложные.
1. Классификация переменных
1.2. Статические и динамические переменные
Адрес поименованной ячейки памяти также может определяться как на этапе компиляции, так и во время выполнения программы. По времени создания переменные бывают статическими и динамическими. Первые создаются в момент запуска программы или подпрограммы, а вторые создаются в процессе выполнения программы.
Динамическая адресация нужна только тогда, когда количество поступающих на хранение данных заранее точно не известно. Такие данные размещают в специальных динамических структурах, тип которой выбирается в соответствии со спецификой задачи и с возможностями выбранной системы программирования. Это может быть стек, куча, очередь и т. п. Даже файл, в том смысле, который заложил Н.Вирт в Паскаль, является динамической структурой.
Переменные типа статические это переменные “Долговременного” хранения, т.е. они хранят свои значения в пределах своей функции или файла. От глобальных они отличаются и тем, что за рамками своей функции или файл они неизвестны. Поскольку спецификатор по-разному определяет их “судьбу” локальных и глобальных переменных.
1.3. Локальные и глобальные переменные.
Переменные, которые объявляются внутри функции называются локальными. Их могут использовать только инструкции, относящиеся к телу функции. Локальные переменные не используются внешними функциями. Локальная переменная известна только функции, в которой она определена.
Локальные переменные создаются при вызове функции и разрушаются при выходе из неё. То же самое можно сказать и о памяти, выделяемой для локальных переменных: при вызове функции в неё записываются соответствующие значения, а при выходе из функции память освобождается. Это означает что локальные переменные не поддерживают своих значений между вызовами функций. (Другими словами, значение локальной переменной теряется при каждом возврате из функции.)
Глобальные переменные известны всей программе.
Чтобы придать переменной “Всепрограммную” известность, ее необходимо сделать глобальной. В отличие от локальных, глобальные переменные хранят свои значения на протяжении всего времени жизни (времени существования) программы. Чтобы создать глобальную переменную, ее необходимо объявить вне всех функция. Доступ к глобальной переменной можно получить из любой функции.
Важно помнить, что, если глобальная и локальная переменные имеют одинаковые имена, все ссылки на “спорное” имя переменной внутри функции, в которой определена локальная переменная, относятся к локальной, а не к глобальной переменной.
1.4. Простые и сложные переменные
По наличию внутренней структуры, переменные могут быть простыми или сложными (составными).
Простые переменные не имеют внутренней структуры, доступной для адресации. Последняя оговорка важна потому, что для компилятора или процессора переменная может быть сколь угодно сложной, но конкретная система (язык) программирования скрывает от программиста её внутреннюю структуру, позволяя адресоваться только «в целом».
Сложные переменные программист создаёт для хранения данных, имеющих внутреннюю структуру. Соответственно, есть возможность обратиться напрямую к любому элементу.
Самыми характерными примерами сложных типов являются массив (все элементы однотипные) и запись (элементы могут иметь разный тип).
Следует подчеркнуть относительность такого деления: для разных программ одна и та же переменная может иметь разную структуру.
Например, компилятор различает в переменной вещественного типа 4 поля: знаки мантиссы и порядка, плюс их значения, но для программиста, компилирующего свою программу, вещественная переменная — единая ячейка памяти, хранящая вещественное число.
Простой тип - в информатике тип данных, о объектах которого, переменных или постоянных, можно сказать следующее:
работа с объектами осуществляется с помощью конструкций языка;
внутреннее представление значений объектов может зависеть от реализации транслятора (компилятора или интерпретатора) и от платформы;
объекты не включают в себя другие объекты и служат основой для построения других объектов (см. составной (сложный) тип).
Создание переносимого кода (кода, результат компилирования/интерпретации которого разными трансляторами одинаков на разных платформах) возможно, если не пытаться интерпретировать значения простых типов. Например, на разных платформах числа могут отличаться основанием системы счисления, разрядностью, порядком байт, форматом представления. При работе с форматами представления чисел код выполняется быстрее, но переносимость теряется.
Как правило, к простым относятся числовые типы:
целочисленные типы:
типы для хранения целых чисел с разной точностью;
типы для хранения символов строк;
тип для хранения значений true и false;
тип для хранения одного значения из конечного множества;
вещественные типы:
типы для хранения вещественных чисел с разной точностью;
и другие.
В каждом языке программирования доступны разные простые типы данных. Например, в некоторых языках для контролеров с программируемой логикой имеются простые типы для хранения времени. Способы записи констант разных типов определяются стандартом языка. Например, запись 1 может описывать константу целого типа, а запись 1.0 - вещественного.
Введение простых типов преследовало несколько целей:
упрощение жизни программистов путём предоставления стандартных контейнеров для размещения данных;
предотвращение логических ошибок (ошибок программиста), связанных с применением к данным несвойственных им команд;
предотвращение ошибок и неоднозначностей, связанных со случайным или преднамеренным доступом к внутреннему представлению значений простых типов.
Большинство языков программирования содержат предопределённые функции для работы с простыми типами:
функция для получения знака числа;
функция для получения модуля числа;
функция для проверки чётности/нечётности числа;
функции для получения целой и дробной частей вещественного числа;
функции для приведения типов с округлением или без.
Некоторые языки (например, C и C++) не ограничивают программиста в выборе способа обработки значений простых типов, даже позволяют определить поля для простого типа.
Сложный (составной) тип — тип данных, объекты (переменные или постоянные) которого имеют внутреннюю структуру, доступную программисту.
В разных языках программирования набор базовых сложных типов может несколько отличаться (чаще по названию и деталям реализации). Есть, однако, объективные критерии — однотипность элементов и способ доступа, позволяющие выделить главные представители сложных типов (названия приводятся на примере Pascal, в котором Н.Вирт наиболее чётко сформулировал эти идеи).
Массив (array) — элементы только однотипные, доступ произвольный;
Запись (record) — элементы возможно разных типов, доступ произвольный;
Файл (file) — элементы однотипные, доступ последовательный (примечание: не путать с дисковым файлом!).
Разумеется, этот список не включает даже всех предопределённых в языках типов, но он отражает большинство моделируемых программистами структур данных.
Очень важной идеей, также родившейся на границе 60-70-х годов XX века, является возможность произвольного конструирования нужных структур из небольшого набора предопределённых типов. Чем адекватнее программист смоделировал обрабатываемые данные в рамках такого «конструктора», тем без ошибочнее и долговечнее будет разработанная программа.
Типы переменных
Определенно семь основных типов данных: целочисленный, символьный, символьный двубайтовый, с плавающей точкой, с плавающей точкой двойной точности, логический. Для объявления переменных этих типов используется: int, char, wchar_i, int, float, double, bool и void. Типичный размеры значений в битах и диапазоны представления для каждого типа приведены в табл. 1
табл 1.
Помните, что размеры и диапазоны, могут различаться за счет таких факторов какой язык программирования вы использует. Самое большое различие
существует между 16- и 32-разрядными средами разработки: для представления целочисленного значения в 16-разрядной среде используется, как правило, 16 бит, а в 32-разрядной — 32.
Переменные типа char используются для хранения 8-разрядных ASCII-символов (например, букв A, B или C) либо любых других 8-разрядных значений. Чтобы задать символ, необходимо заключить его в одинарные кавычки. Тип wchar_t (используется только для C++ и C) предназначен для хранения символов, входящих в состав больших символьных наборов. Вероятно, вам известно, что в некоторых естественных языках (например, китайском) определено очень большое количество символов, для которых 8-разрядное представление (обеспечиваемое типом char) весьма недостаточно. Для решения проблем такого рода в язык C++ и был добавлен тип wchar_t.
Переменные типа int позволяют хранить целые числа (не содержащие дробных компонентов). Такие переменные часто используются для управления циклами и в условных инструкциях. К переменным типа float и double обращаются либо для обработки чисел с дробной частью, либо при необходимости выполнения операций над очень большими или очень малыми числами. Типы float и double различаются значением наибольшего и наименьшего числа, которые можно хранить с помощью переменных этих типов. Как показано в табл. 1, тип double в C++ позволяет хранить число, приблизительно в десять раз превышающее значение типа float из-за чего double более точно считает математические примеры.
Тип bool предназначен для хранения булевых значений. В программирование определены две булевы константы: true и false, являющиеся единственными значениями, которые могут иметь переменные типа bool.
Объявление переменных
Общий формат инструкции объявления переменных выглядит так:
Тип переменная (через запятую);
Здесь тип означает допустимый тип данных, а элемент переменная может состоять как из одного, так и из нескольких имен, на основе C++ пример представление переменных
int a, b, c, d;
char ch, sad, dsa;
float x, e, t, y;
double d;
Модификаторы типов
Перед такими типами данных, как char, int, и double, разрешается использовать модификаторы. Модификатор служит для изменения значения базового типа, чтобы он более точно соответствовал конкретной ситуации. Перечислим возможные модификаторы типов.
signed, unsigned, long, short. Модификаторы signed, unsigned, long и short можно применять к целочисленным базовым типам. Кроме того, модификаторы sighed и unsigned можно использовать с типом char, а модификатор long с типом double. Все допустимые комбинации базовых типов и модификаторов для 16- и 32-разрядных сред приведен в табл 2. и в табл 3. В этих таблицах также указаны типичные размеры значений в битах и диапазоны представления для каждого типа.
Табл 2.
Изучая эти таблицы, обратите внимание на количество битов, выделяемых для хранения коротких, длинных и обычных целочисленных значений. Заметьте: что в большинстве 16-разрядных сред размер (в битах) обычного целочисленного значения совпадает с размером короткого целого. Также отметьте, что в большинстве 32-разрядных сред размер (в битах) обычно целочисленного значения совпадает с размером длинного целого.
Табл 3.
Различие между целочисленным значением со знаком и без него заключается в старшем разряде.