1.3. Переменные и именованные константы
Переменная как объект. Одним из основных понятий языка Си является объект - именованная область памяти. Частный случай объекта - переменная. Отличительная особенность переменной состоит в возможности связывать с ее именем различные значения, совокупность которых определяется типом переменной. При задании значения переменной в соответствующую ей область памяти помещается код этого значения. Доступ к значению переменной наиболее естественно обеспечивает ее имя, а доступ к участку памяти возможен только по его адресу.
Определение переменных. Каждая переменная перед ее использованием в программе должна быть определена, т.е. для переменной должна быть выделена память. Размер участка памяти, выделяемой для переменной, и интерпретация содержимого зависят от типа, указанного в определении переменной.
В соответствии с типами значений, допустимых в языке Си, рассмотрим символьные, целые и вещественные переменные автоматической памяти.
Простейшая форма определения переменных:
тип список _ имен_ пepeменных;
где имена переменных - это выбранные про грамм истом идентификаторы, которые в списке разделяJOТСЯ запятым;
тип - один из уже упоминаемых (в связи с константами) типов.
Целочисленные типы:
char - целый длиной не менее 8 бит;
short int - короткий целый (допустима аббревиатура short);
int - целый;
long - длинный целый.
Каждый из целочисленных типов может быть определен либо как знаковый signed либо как беззнаковый unsigned (по умолчанию signed).
Различие между этими двумя типами - в правилах интерпретации старшего бита внутреннего представления. Спецификатор signed требует, чтобы старший бит внутреннего представления воспринимался как знаковый; unsigned означает, что старший бит внутреннего представления входит в код представляемого числового значения, которое считается в этом случае беззнаковым. Выбор знакового или беззнакового представления определяет предельные значения, которые можно представить с помощью описанной переменной. Например, переменная типа unsigned int позволяет представить числа от 0 до 65535, а переменной типа signed int (или просто int) соответствуют значения в диапазоне от -32768 до +32767.
По умолчанию, при отсутствии в качестве префикса ключевого слова unsigned любой целый тип считается знаковым (signed). Таким образом, употребление совместно со служебными словами char, short, int, long префикса signed излишне. Допустимо отдельное использование обозначений (спецификаторов) "знаковости". При этом
signed эквивалентно signed int;
unsigned эквивалентно unsigned int.
Примеры определений целочислениых переменных:
char symbol, сс;
unsigned char code;
int numЬer, row;
unsigned long long_number;
Обратите внимание на необходимость символа "точка с запятой" в конце каждого определения.
Стандартом языка введены следующие вещественные типы:
float - вещественный одинарной точности;
double - вещественный удвоенной точности;
long double - вещественный максимальной точности.
Значения всех вещественных типов в ЭВМ представляются с "плавающей точкой", т.е. с мантиссой и порядком, как было рассмотрено при определении констант (§ 1.2). Примеры определений вещественных переменных:
float х, Х, сс3, pot_8;
double е, Stop, В4;
Предельные значення переменных. Предельные значения констант (и соответствующих переменных) разработчики компиляторов вправе выбирать самостоятельно исходя из аппаратных возможностей компьютера. Однако при такой свободе выбора стандарт языка требует, чтобы для значений типа short и int было отведено не менее 16 бит, для long - не менее 32 бит. При этом размер long должен быть не менее размера int, а int не менее short Предельные значения арифметических констант и переменных для большинства компиляторов приведены в табл. 3.
Таблица 3