мета-данные страницы
  •  

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
c:c_ultimate_guide:variables [2025/10/09 11:19] – создано radi0devc:c_ultimate_guide:variables [2025/11/09 12:07] (текущий) – внешнее изменение A User Not Logged in
Строка 1: Строка 1:
-====== Переменные и литералы ======+====== переменные и литералы ======
  
 +Переменные бывают глобальными, локальными, статическими и внешними. См [[storage_classes]] / [[..:basic_concepts:scope|]]
 +
 +===== Переменные и их базовые типы =====
 +
 +<code c>
 +int a; // объявление (случайное значение)
 +int a = 10; инициализация при объявлении
 +</code>
 +
 +имена идентификаторов регистрозависимы и могут состоять из следующих символов: ''a-z, A-Z, 0-9, _''. См [[..:basic_concepts:identifier|идентификаторы]]
 +
 +^ Тип данных ^ Для 16‑битных ^ Для 32‑битных ^ Для 64‑битных ^ Описание ^ Диапазон ^
 +| char | 1 | 1 | 1 | Символьный и целочисленный | [0; 255] или [-128; 127] |
 +| short [int] | 2 | 2 | 2 | Целочисленный | [-32768; 32767] |
 +| int | 2 | 4 | 4 | Целочисленный | [-32768; 32767] или [-2147483648; 2147483647] |
 +| long [int] | 4 | 4 | 8 | Целочисленный | зависит от платформы (см. столбец) |
 +| long long [int] | 8 | 8 | 8 | Целочисленный | зависит от реализации (обычно 64‑битный, см. столбец) |
 +| float | 4 | 4 | 4 | Вещественный | см. IEEE‑754 single (примерно ±3.4e38, ~6–9 значащих цифр) |
 +| double | 8 | 8 | 8 | Вещественный | см. IEEE‑754 double (примерно ±1.7e308, ~15–17 значащих цифр) |
 +| long double | 10 | 10 | 10 | Вещественный | платформа‑зависимо (часто 80‑битное расширение на x86, иначе совпадает с double) |
 +
 +для получения размера переменных используеться оператор ''sizeof()'', возвращающий размер в байтах типа size_t. Он так же может принимать тип в качестве аргумента.
 +
 +<note>
 +Тип результата оператора sizeof - size_t фактически является псевдонимом для типа unsigned long long
 +</note>
 +
 +==== Модификаторы signed и unsigned ====
 +
 +  * ''unsigned'' – беззнаковый;
 +  * ''signed'' – знаковый (появился в стандарте ANSI C90). 
 +
 +<note important>
 +Обратите внимание, когда я говорю о модификаторах signed и unsigned, то отмечаю именно целочисленные типы данных. Дело в том, что вещественные типы float и double всегда знаковые и __применять к ним эти модификаторы нельзя__
 +</note>
 +
 +==== Модификатор const ====
 +
 +Объект с модификатором const становиться константным, тоесть неизменяемым.
 +
 +<code c>
 +const float PI = 3.14;
 +</code>
 +
 +
 +===== Числовые и символьные литералы =====
 +
 +<code c>
 +int dec, hex, oct;
 +dec = 100;
 +hex = 0x1FA;
 +oct = 0123;
 +
 +double d1, d2, d3, d4;
 +d1 = 10.0;
 +d2 = -7.;
 +d3 = 1e2; // <число>e<степень десятки>
 +d4 = 5e-3;
 +</code>
 +
 +При желании мы можем явно указать компилятору тип числового литерала. Для этого используются следующие суффиксы:
 +  * U или u – использование модификатора unsigned в определении литерала;
 +  * L или l – использование типа long при определении литерала;
 +  * LL или ll – использование типа long long при определении литерала. 
 +
 +<code c>
 +int dec_i, dec_ui, dec_l, dec_ul;
 +float var_f;
 +
 +dec_i = 100;    // тип литерала int
 +dec_ui = 100U;  // тип литерала unsigned int
 +dec_l = 100L;   // тип литерала long
 +dec_ul = 100UL; // тип литерала unsigned long
 +var_f = 100.0f  // тип литерала float
 +</code>