Константы и переменные: числовые, символьные, строковые

Константы и переменные в языке Си

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

Константы бывают числовые, символьные и строковые. Числовые константы делятся на целочисленные и вещественные.

Целочисленные константы

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

Десятичные Последовательность цифр (0 — 9), которая начинаются с цифры, отличной от нуля. Пример: 1, -29, 385. Исключение — число 0.
Восьмеричные Последовательность цифр (0 — 7), которая всегда начинается с 0. Пример: 00, 071, -052, -03.
Шестнадцатеричные Последовательность шестнадцатеричных цифр (0 — 9 и A — F), которой предшествует присутствует 0x или 0X. Пример: 0x0, 0x1, -0x2AF, 0x17.

Двоичная система представления данных непосредственно в языке Си не поддерживается. Однако можно воспользоваться файлом binary.h, в котором определены двоичные константы в пределах байта.

Пример использования двоичной системы счисления в языке Си:

1
2
3
4
5
6
7
8
9
#include <stdio.h>
#include "binary.h"
int main()
{
  unsigned char p = b10001001 | b00001010; // p=b10001011=139
  printf("p = %dd = %xh", p, p);
  getchar(); getchar();
  return 0;
}

Результат выполнения

Двоичная система счисления

В зависимости от значения целой константы компилятор присваивает ей тот или иной тип (char, int, long int).

С помощью суффикса U (или u) можно представить целую константу в виде беззнакового целого.

Например, Константе 200U выделяется 1 байт, и старший бит используется для представления одного из разрядов кода числа и диапазон значений становится от 0 до 255. Суффикс L (или l) позволяет выделить целой константе 8 байт (long int).

Совместное использование в любом порядке суффиксов U (или u) и L (или l) позволяет приписать целой константе тип unsigned long int, и она займет в памяти 64 разряда, причем знаковый разряд будет использоваться для представления разряда кода (а не знака).

Вещественные константы

Константа с плавающей точкой (вещественная константа) всегда представляется числом с плавающей точкой двойной точности, т. е. как имеющая тип double, и состоит из следующих частей:

  • целой части — последовательности цифр;
  • точки — разделителя целой и дробной части;
  • дробной части — последовательности цифр;
  • символа экспоненты е или E;
  • экспоненты в виде целой константы (может быть со знаком).

Любая часть (но не обе сразу) из нижеследующих пар может быть опущена:

  • целая или дробная часть;
  • точка или символ е (Е) и экспонента в виде целой константы.

Примеры вещественных констант

  • 345.
  • 3.14159
  • 2.1Е5
  • .123ЕЗ
  • 4037е-5

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

  • F (или f) — float для простых вещественных констант,
  • L (или l) — long double для вещественных констант двойной расширенной точности.

Примеры:

  • 3.14159F — константа типа float, занимающая 4 байта;
  • 3.14L — константа типа long double, занимающая 10 байт.

Символьные константы

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

Код Обозначение Описание
0x00 ‘\0’ Нуль-символ, NULL
0x07 ‘\a’ Звуковой сигнал.
0x08 ‘\b’ Возврат на 1 шаг (Backspace)
0x09 ‘\t’ Горизонтальная табуляция (Tab)
0x0A ‘\n’ Перевод строки (Enter)
0x0B ‘\v’ Вертикальная табуляция (в консоли аналогична переводу строки)
0x0C ‘\f’ Смена страницы
0x0D ‘\r’ Возврат каретки

Как правило, нажатие клавиши Enter генерирует сразу два управляющих символа — перевод строки (0x0A) и возврат каретки (0x0D).

Все символьные константы имеют тип char и занимают в памяти 1 байт. Значением символьной константы является числовое значение её внутреннего кода.

Строковые константы

Строковая константа — это последовательность символов, заключенная в кавычки, например:

"Это строковая константа"

Кавычки не входят в строку, а лишь ограничивают её. Технически строковая константа представляет собой массив символов, и по этому признаку может быть отнесена к разряду сложных объектов языка Си.

В конце каждой строковой константы компилятор помещает ‘\0’ (нуль-символ), чтобы программе было возможно определить конец строки. Такое представление означает, что размер строковой константы не ограничен каким-либо пределом, но для определения длины строковой константы её нужно полностью просмотреть.

Поскольку строковая константа состоит из символов, то она имеет тип char. Количество ячеек памяти, необходимое для хранения строковой константы на 1 больше количества символов в ней (1 байт используется для хранения нуль-символа).

Символьная константа ‘x’ и строка из одного символа "x" — не одно и то же. Символьная константа — это символ, используемый для числового представления буквы x, а строковая константа "x" содержит символ ‘x’ и нуль-символ ‘\0’ и занимает в памяти 2 байта. Если в программе строковые константы записаны одна за другой через разделители, то при выполнении программы они будут размещаться в последовательных ячейках памяти.

Переменные

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

Любая переменная до ее использования в программе на языке Си должна быть объявлена, то есть для нее должны быть указаны тип и имя (идентификатор).

Объявление переменных в Си осуществляется в форме

ТипПеременной ИмяПеременной;

Каждую переменную можно снабдить комментарием, поясняющим ее смысл. Например,

 
int i; // счётчик циклов

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

 
int i, n;

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

ТипПеременной ИмяПеременной=значение;

Например,

1
2
3
int i=0, k, n, m=1;
float pi=3.1415, y;
char a=‘a’;
Прокрутить вверх