Переменные являются именованными указателями на области памяти, хранящие их значения. В языке C каждая переменная должна иметь тип, описывающий структуру данных, хранящихся в памяти. Эта информация позволяет компьютеру выяснить, сколько памяти необходимо зарезервировать для хранения значения той или иной перемененной.
Язык C поддерживает несколько базовых типов данных, таких, как char, int, float и double. Существуют и дополнительные типы данных, объявляемые с использованием слов signed, unsigned и long, которые позволяют хранить в памяти значения из больших диапазонов.
Целочисленная переменная типа int позволяет хранить целые числа в четырех байтах памяти. При присваивании целочисленной переменной значения с плавающей точкой типа float или double, это значение будет автоматически преобразовано в целочисленное.
int count = 8;
Также в распоряжении разработчика имеются беззнаковые (unsigned int), короткие (short int), длинные (long int) и расширенные длинные (long long int) целочисленные значения. Они могут использоваться при необходимости:
Обозначение типа данных int может отбрасываться в случае использования обозначений типов данных long и short. Помимо обозначения беззнаковых переменных (unsigned), существует обозначение знаковых переменных (signed), которое используется по умолчанию на большинстве платформ. Например, следующие объявления являются эквивалентными:
long lightspeed = 299792458;
long int lightspeed = 299792458;
signed long lightspeed = 299792458;
signed long int lightspeed = 299792458;
Переменная с плавающей точкой типа float позволяет хранить вещественные числа в четырех байтах памяти.
float pi = 3.14;
По аналогии с переменной типа float, переменная типа double также позволяет хранить вещественные числа, но эти числа могут иметь двойную точность, так как под них отводится восемь байт памяти.
double score = 53.92819384;
Кроме того, имеется тип данных long double для работы с вещественными числами с повышенной точностью.
Символьная переменная типа char позволяет хранить один символ в одном байте памяти. Хотя в качестве значения переменной и устанавливается символ, в памяти хранится его целочисленное представление.
char initial = 'd';
Помимо обычной символьной переменной существует знаковая (signed char) и беззнаковая (unsigned char) символьные переменные.
В языке C для строк не используется отдельного типа данных, как это делается в таких языках, как Python. Вместо этого строки представлены массивами символьных переменных.
Подробнее об этом будет рассказано в разделе «Строки».
Современный стандарт языка C99 включает поддержку логических переменных типа bool (принимающих значения true и false), однако в случае компиляции программы с такими переменными с помощью устаревшего компилятора будут возникать ошибки.
Новый тип данных объявлен как _Bool, хотя в случае подключения модуля <stdbool.h> тип _Bool будет эквивалентен типу bool.
Примечание: для использования типа bool программа должна компилироваться с параметром -std=c99.
Если переменная объявлена в рамках функции, она может использоваться исключительно в рамках этой функции. Любая попытка использования ее извне, например, из другой функции, приведет к выводу сообщения об ошибке. Такая переменная называется локальной.
Глобальные переменные объявляются вне функций и могут использоваться из любого фрагмента кода программы. Например, значение такой переменной может изменяться из нескольких функций.
Статические переменные объявляются как локальные переменные. Такая переменная инициализируется в момент первого вызова функции. После выхода из функции значение статической переменной сохраняется в памяти и не изменяется до следующего вызова этой функции.
Статическая переменная объявляется с помощью слова static, располагающегося перед описанием типа переменной.
static int age;
Пример:
Язык C предполагает использование набора зарезервированных ключевых слов, которые не могут использоваться в качестве имен переменных. Этими ключевыми словами являются:
auto
break
case
char
continue
default
do
double
else
enum
extern
float
for
goto
if
int
long
register
return
short
sizeof
static
struct
switch
typedef
union
unsigned
void
while
Имена переменных должны начинаться с буквенного символа или символа подчеркивания и могут содержать цифры.
Пример: