Типи даних в Сі – клас даних, значення яких мають схожі характеристики. Тип визначає внутрішнє подання даних у пам’яті. Основні типи даних: логічний, цілочисельний, числа з плаваючою точкою, рядкові, покажчики.
Типізація
При динамічної типізації мінлива зв’язується з типом на момент ініціалізації. Виходить, що змінна в різних ділянках коду може мати різні типи. Динамічну типізацію підтримують Java Script, Python, Ruby, PHP.
Статична типізація є протилежністю динамічної. При оголошенні мінлива отримує тип, який не змінюється в подальшому. Мови Сі і Сі++ є саме такими. Цей спосіб найбільш зручний для написання складного коду, а на стадії компіляції виключається багато помилок.
Мови неформально поділяються на сильнотипизированный і слаботипизированный. Сильна типізація передбачає, що компілятор видасть помилку при розбіжності очікуваного і фактичного типів.
x = 1 + “2”; //помилка – не можна додати до числа символьний знак
Приклад слабкою типізації.
x = 1 + “2”; // 3
Перевірка узгодження типів здійснюється системою типобезопасности. Помилка типізації виникає, наприклад, при спробі використовувати число як функцію. Існують нетипизированные мови. В протилежність типізованих, вони дозволяють здійснювати будь-які операції над кожним об’єктом.
Класи пам’яті
Змінні, незалежно від їх типу, мають свою область видимості і час існування.
Класи пам’яті:
- auto;
- static;
- extern;
- register.
Всі змінні в мові Сі за замовчуванням є локальними. Вони можуть використовуватися тільки усередині функції або блоку. По завершенні функції їх значення знищується.
Статична змінна також є локальною, але поза свого блоку може мати інше значення, а між викликами функції значення зберігається.
Зовнішня змінна є глобальною. Вона доступна в будь-якій частині коду і навіть в іншому файлі.
Реєстрова мінлива рекомендує компілятору зберігати значення в оперативну пам’ять.
Специфікатори типів даних в Сі можуть не вказуватися у таких випадках:
Базові типи
Для вказівки простих типів зазначаються специфікатори int, char, float та double. До змінних можуть підставлятися модифікатор unsigned (беззнаковий), signed (знаковий), short, long, long long.
За замовчуванням усі числа є знаковими, відповідно, можуть перебувати в діапазоні тільки позитивних чисел. Щоб визначити змінну типу char як знакову, пишеться signed char. Long, long long і short вказують, як багато місця в пам’яті відводиться для зберігання. Найбільше – long long, найменше – short.
Char – найменший тип даних в мові Сі. Для зберігання значень виділяється всього 1 байт пам’яті. Змінної типу character зазвичай присвоюються символи, рідше – цифри. Символьні значення беруться в лапки.
char a = a”;
char b = 2;
Тип int зберігає цілі числа, його розмір не визначений займає до 4 байт пам’яті, в залежності від архітектури комп’ютера.
int a = 12;
Явне перетворення беззнаковой змінної задається так:
unsigned int a = 12;
Неявне виглядає так:
int a = 12u;
Float і double визначають числа з крапкою. Числа float представляються у вигляді -2.3 або 3.34. Double використовується для більшої точності – після роздільника цілої та дробової частини вказується більше цифр. Цей тип займає більше місця в пам’яті, ніж float.
double a = 12.4567;
Void має пусте значення. Він визначає функції, які нічого не повертають. За допомогою цього специфікатора вказується пусте значення в аргументах методів. Покажчики, які можуть приймати будь-який тип даних, також визначаються як void.
Логічний тип Bool
Застосовується у перевірках умов і циклах. Має лише два значення:
- істина;
- брехня.
Булеві значення можуть перетворюватися в значення типу int. True еквівалентно одиниці, false – нулю. Перетворення типів передбачено тільки між bool і int, в іншому випадку компілятор видасть помилку.
int x = 123;
if (x) { //Error: “Cannot implicitly convert type ‘int’ to ‘bool'”
};
if (x != 0) // The C# way
{
}
Рядки та масиви
Масиви належать до складними типами даними в Сі. МП не працює з рядками так само, як це робить Джаваскрипт або Рубі. В Сі всі рядки є масивами елементів символьного значення. Рядки закінчуються нульовим байтом “