Помощь в написании студенческих работ
Антистрессовый сервис

Константы и переменные

РефератПомощь в написанииУзнать стоимостьмоей работы

Спецификатор register также относится к автоматическому классу памяти. Переменные, объявленные с таким спецификатором, по возможности располагаются не в локальной памяти, а в одном из доступных регистров. В этом случае доступ к переменной осуществляется намного быстрее. Если в момент выполнения кода данной части программы все регистры оказываются занятыми, переменная будет обрабатываться как… Читать ещё >

Константы и переменные (реферат, курсовая, диплом, контрольная)

Константы (литералы) в языке С могут быть следующих типов:

  • • целочисленные;
  • • вещественные;
  • • символьные;
  • • строковые.

Целочисленные константы служат для хранения целочисленных значений. Такие значения в языке С могут представляться в десятичной, восьмеричной и шестнадцатеричной системах счисления. Десятичные константы — любые числа без дробной части, не начинающиеся с нуля. Восьмеричные целые константы начинаются с нуля. Шестнадцатеричные константы начинаются с Ох или с ОХ. Непосредственно за константой могут располагаться в произвольном сочетании один или два специальных суффикса: U (или и), означающий unsigned — беззнаковый; и L (или 1), означающий long. Например:

  • • 23 — десятичная константа;
  • • 023 — восьмеричная константа;
  • • 0×23 — шестнадцатеричная константа;
  • • 23U — десятичная константа без знака;
  • • 0×23L — шестнадцатеричная константа в формате длинного целого.

Вещественная константа используется для задания вещественных значений. Такая константа может быть записана в обычной десятичной или экспоненциальной (научной) форме. В последнем случае число записывается в виде мантиссы и порядка. Мантисса отделяется от порядка символом Е (е). Непосредственно за константой могут располагаться один из двух специальных суффиксов: F (f), означающий float; и L (или 1), означающий long. Например:

  • • 10.25 — вещественное число 10,25;
  • • 1025. — вещественное число 1025;
  • • 1.025Е-3 — вещественное число 0,1 025;
  • • 10.25f — вещественное число в формате с одинарной точностью;
  • • 10.251 — вещественное число высокой точности.

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

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

Например:

  • • 'а' — символ а;
  • • 'А' — символ А;
  • • '127' — символ, имеющий код 127 (и);
  • • 'x7F' — символ, имеющий код 7 °F в шестнадцатеричном представлении (и);
  • • 'W — символы //.

Таблица 5.1

Символьные константы, не имеющие графического представления.

Символ.

I Иестнадцатеричное представление.

Имя.

Описание.

х00.

null.

Пустой символ.

а

х07.

bel.

Звуковой сигнал (звонок).

ъ.

х08.

bs.

Возврат на шаг (забой).

f.

хОС.

ff.

Перевод страницы.

п.

хОА.

if.

Перевод строки.

V.

xOD.

cr.

Возврат каретки.

х09.

ht.

Г оризонтал ьная табу л я ц ия.

V.

х ()В.

vt.

Вертикальная табуляция.

х5С.

Обратная косая черта (обратный слэш).

V.

х27.

".

Одинарная кавычка.

V.

х22.

" .

Двойная кавычка.

x3 °F.

Вопросительный знак.

Строковая константа — это ноль и более символов, заключенных в двойные кавычки, имеет тип массив символов (char). Во внутреннем представлении она содержит в конце добавляемый автоматически символ ноль ' являющийся индикатором конца константы. Нулевая (пустая строка) записывается в виде «» и хранится в виде одного символа ' Константы могут быть записаны в нескольких строках. Последний символ переносимой строки — это. Этот символ и символ повой строки отбрасываются при выводе данных. Соседние строковые константы, разделенные только пробелами, конкатенируются (объединяются). Например:

  • • «Строка» — константа «Строка»;
  • • «Часть1» «Часть2» — константа «Часть1Часть2»;
  • • «Часть113хОАЧасть2» — константа «Часть 1

Часть2».

Переменная — это поименованная область памяти, имеющая определенное значение и тип.

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

Типы данных в С делятся на основные (стандартные) и производные.

Стандартные (базовые) типы включают:

  • • целочисленные;
  • • вещественные;
  • • символьные.

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

Для базовых типов используются стандартные идентификаторы типов, приведенные в табл. 5.2.

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

Таблица 5.2

Стандартные идентификаторы типов данных.

Тип данных.

Отводимая память (в байтах).

Диапазон хранимых значений.

Название.

Идентификатор

Min.

Мах.

Символ.

signed char.

— 128.

Беззнаковый символ.

unsigned char.

Короткое целое.

signed short.

— 32 768.

11еотрицательное короткое целое.

unsigned short.

Целое.

signed int.

— 2 147 483 648.

Неотрицательное целое.

unsigned int.

Длинное целое.

signed long.

— 2 147 483 648.

Неотрицательное длинное целое.

unsigned long.

Вещественное одинарной точности.

float.

— 3.4Е+38.

3.4Е+38.

Вещественное двойной точности.

double.

— 1.7Е+308.

1.7Е+308.

Вещественное высокой точности.

long double.

— 3.4Е+4932.

3.4Е+4932.

тальные — для значения числа; во втором — все биты отводятся под хранение значения числа.

Параметры типов signed int и unsigned int зависят от конкретной реализации компилятора и целевой платформы: для 32-разрядной платформы они эквивалентны соответствующим параметрам типа long.

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

Выделение памяти означает предоставление определенного участка памяти иод хранение переменной. При создании переменной выделение памяти производится автоматически.

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

Выделение памяти происходит при объявлении переменной. Объявление переменной содержит тип данных и имя переменной:

Например:

int к; //объявлена переменная к целого типа.

float р; // объявлена переменная р вещественного типа В соответствии с указанным типом под переменную будет выделен участок памяти определенного размера.

При объявлении переменной может быть выполнена ее инициализация, т. е. присвоение переменной значения. Например, в следующей строке объявлены целые переменные i и j, переменной j присвоено значение 5.

int i, j = 5;

Язык С допускает преобразование (приведение) типов и переименование типов данных.

Возможны явные и неявные (стандартные) преобразования типов.

Явное преобразование типов выполняется специальной операцией приведения типа:

(); //используется в С и C++.

Например:

int а; double b;

b = 10.5; а = (int)b;

// объявлена целочисленная переменная, а // объявлена вещественная переменная b // двойной точности.

// переменной b присвоено значение 10,5.

// переменной, а присвоено значение переменной // Ь, приведенной к целому типу. В результате // а получит значение 10.

Неявные преобразования выполняются компилятором автоматически следующим образом:

• в выражениях операнды преобразуются к одинаковому типу по принципу «простой — в более сложный» (допускающий больший диапазон значений):

char -> short int -*• unsigned int -«? long -*? unsigned long -? float -*? double -> long double;

• в операторах присваивания правая часть преобразуется к типу левой части.

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

typedef.

Здесь тип — существующий тип данных, идентификатор — идентификатор-синоним, например:

// тип t объявлен как синоним типа unsignd int typedef unsigned int t;

// при объявлении переменных x и у используется // длинное название типа unsigned int х, у;

// при объявлении переменных р и q // используется короткое название типа t р, q;

Помимо типа переменная характеризуется временем жизни и областью видимости.

Под временем жизни переменной понимается время от создания переменной (выделения памяти под нее) до ее уничтожения (освобождения памяти).

В большинстве случаев память под переменную выделяется в момент ее объявления. Уничтожение же может происходить в разные моменты времени в зависимости от области видимости, определяемой местом и способом объявления переменной.

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

В зависимости от мест объявления переменных, они делятся:

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

Например:

int i; //объявлена глобальная переменная i.

void main ().

{.

int j; // объявлена локальная переменная j.

}.

Объявление переменной может сопровождаться указанием класса памяти:

Класс памяти определяет порядок размещения переменной в памяти и задается с помощью специальных спецификаторов.

В языке С существует четыре таких спецификатора:

  • • auto;
  • • register;
  • • static;
  • • extern.

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

Спецификатор register также относится к автоматическому классу памяти. Переменные, объявленные с таким спецификатором, по возможности располагаются не в локальной памяти, а в одном из доступных регистров. В этом случае доступ к переменной осуществляется намного быстрее. Если в момент выполнения кода данной части программы все регистры оказываются занятыми, переменная будет обрабатываться как имеющая класс auto. Область видимости и время жизни переменных класса register полностью аналогичны классу auto.

Спецификатор static относится к внутреннему статическому классу памяти. Переменная, объявленная с таким классом памяти, располагается по фиксированному адресу. Поэтому такая переменная существует с момента ее объявления до конца выполнения программы (несмотря на то, что переменная может быть объявлена локально). В отличие от объекта класса памяти auto, переменная не будет уничтожаться при выходе из функции, где она была объявлена.

Например:

void ab ().

{.

int а=1; // объявлена целая локальная переменная а,.

// ей присвоено начальное значение, равное 1 static int b=l; // объявлена статическая переменная Ь, // ей присвоено начальное значение,.

// равное 1.

а++; // значение переменной, а увеличивается на 1 Ь++; // значение переменной b увеличивается на 1.

}.

В начале выполнения функции ab () значения переменных, а и Ь равны 1. В ходе выполнения функции значения обеих переменных увеличиваются на 1. По окончании выполнения функции переменная, а будет уничтожена, а при повторном вызове функции создана вновь со значением 1. Значение же переменной Ь будет увеличиваться па 1 при каждом вызове функции, сама переменная не уничтожается на протяжении всей программы. Значение 1 присваивается переменной b только один раз при первом вызове функции ab (), когда переменная создается. При последующих вызовах функции присвоение переменной b значения 1 игнорируется.

Extern является спецификатором внешнего статического класса памяти. Этот спецификатор позволяет функции использовать внешнюю переменную, даже если она определяется позже в этом или другом модуле. С помощью спецификатора extern можно получить доступ к внешней переменной, объявленной в другом модуле. Спецификатор extern указывает компилятору на то, что в другом модуле такая переменная уже описана. Поэтому выделять под нее память в данном модуле не следует, а следует найти эту переменную в других модулях на стадии компоновки. Если такая переменная найдена не будет, то компоновщик выдаст ошибку.

Показать весь текст
Заполнить форму текущей работой