Типи даних в "Сі". Програмування на мові Сі"

18 0 Новини високих технологій

Типи даних в Сі - клас даних, значення яких мають схожі характеристики. Тип визначає внутрішнє подання даних у пам'яті. Основні типи даних: логічний, цілочисельний, числа з плаваючою точкою, рядкові, покажчики.

Типізація

При динамічної типізації мінлива зв'язується з типом на момент ініціалізації. Виходить, що змінна в різних ділянках коду може мати різні типи. Динамічну типізацію підтримують Java Script, Python, Ruby, PHP. Статична типізація є протилежністю динамічної. При оголошенні мінлива отримує тип, який не змінюється в подальшому. Мови Сі і Сі++ є саме такими. Цей спосіб найбільш зручний для написання складного коду, а на стадії компіляції виключається багато помилок.


Типи даних в "Сі". Програмування на мові Сі"
Мови неформально поділяються на сильнотипизированный і слаботипизированный. Сильна типізація передбачає, що компілятор видасть помилку при розбіжності очікуваного і фактичного типів. x = 1 + "2"; //помилка - можна додати до числа символьний знак Приклад слабкою типізації. x = 1 + "2"; //3 Перевірка узгодження типів здійснюється системою типобезопасности. Помилка типізації виникає, наприклад, при спробі використовувати число як функцію. Існують нетипизированные мови. В протилежність типізованих, вони дозволяють здійснювати будь-які операції над кожним об'єктом.

Класи пам'яті

Змінні, незалежно від їх типу, мають свою область видимості і час існування.
Типи даних в "Сі". Програмування на мові Сі"
Класи пам'яті:
  • auto;
  • static;
  • extern;
  • register.
  • Всі змінні в мові Сі за замовчуванням є локальними. Вони можуть використовуватися тільки усередині функції або блоку. По завершенні функції їх значення знищується. Статична змінна також є локальною, але поза свого блоку може мати інше значення, а між викликами функції значення зберігається. Зовнішня змінна є глобальною. Вона доступна в будь-якій частині коду і навіть в іншому файлі. Реєстрова мінлива рекомендує компілятору зберігати значення в оперативну пам'ять. Специфікатори типів даних в Сі можуть не вказуватися у таких випадках:
  • Всі змінні всередині блоку не є змінними, відповідно, якщо передбачається використання саме цього класу пам'яті, то спецификатор auto не вказується.
  • Всі функції, оголошені поза блоку або функції, є за замовчуванням глобальними, тому спецификатор extern не обов'язковий.
  • Базові типи

    Для вказівки простих типів зазначаються специфікатори 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 або 334. Double використовується для більшої точності - після роздільника цілої та дробової частини вказується більше цифр. Цей тип займає більше місця в пам'яті, ніж float.
    double a = 124567; 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 { }

    Рядки та масиви

    Масиви належать до складними типами даними в Сі. МП не працює з рядками так само, як це робить Джаваскрипт або Рубі. В Сі всі рядки є масивами елементів символьного значення. Рядки закінчуються нульовим байтом " ".

    Типи даних в "Сі". Програмування на мові Сі"
    Оголошення рядка Сі: char b[]= {'s', 't', 'r', 'i', 'n', 'g', ' '}; Рядок також оголошується в стислому вигляді. char a[]= "string"; a[1]=== b[1]; //'t' Цілочисельний або символьні масиви оголошуються однаковим чином: тип даних ім'я змінної[размер массива]. int a[100]; char b[5]; Подібний синтаксис вказує, що розмір значення int не може бути більше, ніж 100 символів. При створенні масиву бронюється деяку кількість комірок в пам'яті для зберігання елементів. Тому для обробки масивів даних з невідомої розмірністю або такою, яка буде змінюватися, динамічно виділяється пам'ять. Багатовимірні масиви оголошуються так: int a[2] [3]; При створенні цього масиву виділяється місце, в даному випадку, для зберігання двох вкладених масивів, які складаються з трьох елементів. Ініціалізація багатовимірного масиву: int a[2] [3]= {123 456}; a[1]; //[1, 2, 3] a[2]; //[4, 5, 6]

    Посилання покажчики

    Покажчики - головна особливість мови, вони відкривають широкі можливості для роботи з пам'яттю. Вони передають інформацію про розташування іншої змінної в пам'яті. Перед використанням вони, подібно іншим змінним, оголошуються у вигляді type *pointer. Type - тип змінної, pointer - ім'я покажчика.
    Типи даних в "Сі". Програмування на мові Сі"
    Щоб задати вказівником значення іншої змінної, використовуються посилання. Вони передають адреса змінної і використовуються в якості безпечного покажчика. int a = 2; int *pointer; pointer = &a; Посилання дозволяють працювати з покажчиком, як з об'єктом.
    Типи даних в "Сі". Програмування на мові Сі"
    У даному випадку &a поверне 0x7340cad2a25c, *pointer - 2 але pointer без "*" - 0x7340cad2a25c. Змінюючи значення, ми не міняємо його адресу, тому pointer так само буде посилатися на 0x7340cad2a25c, але при цьому змінить своє значення. Покажчик на інший покажчик оголошується у вигляді: int w = 100; int *x = &w; int **z = &x; Покажчик на масив працює трохи іншим способом. int c[5]=[1, 2, 3, 4, 5], *a; Ми оголосили масив цілих чисел і покажчик int a. В цьому випадку покажчик вказує не на сам масив, а тільки на його перший елемент. Таким чином, a = c; і a = &c[0]; //1 еквівалентні між собою. Тепер можна послатися на третій елемент масиву з допомогою виразу *(a + 3) або a[3]; На прикладі вище, можна зауважити, що додавання в покажчиках працює іншим чином. До них можуть застосовуватися різні арифметичні операції. Покажчик на масив зазначається так: char (*pa)[10]; Але масив покажчиків виглядає так: char *pc[10];

    Структури

    Структура - такий тип даних в мові Сі, яка полегшує написання і розуміння програм, допомагає групувати дані.
    Типи даних в "Сі". Програмування на мові Сі"
    Структура зразок масиву представляє сукупність даних, але її елементи можуть бути різного типу, а звернення провадиться по імені, а не по індексу. { тип1 имя_переменной1; тип1 имя_переменной1; //інші члени даних; } Оголошення структурної змінної відбувається після закривають фігурних дужок. struct book { char title[20]; char autor[30]; double cast; } book1 book2 *ptr_bk; Доступ до полів здійснюється за допомогою оператора ".". Щоб звернутися до змінної title, пишемо: book1.title; Таким чином, ініціалізуємо змінну book1.title = "String"; Для звернення до вказівників використовується оператор "->". ptr_bk->cast; або оператор ".". (*(ptr_bk)).cast; Друга різновид списків з даними - enum (перерахування). Він містить цілочисельні змінні. enum {red, blue, green}; У прикладі оголошено анонімне перерахування, що містить три члена red, blue, green. Перед зверненням до елементів оголошується перечислительная мінлива. enum name1 {red, blue, red} varname; У цьому випадку name1 є ім'ям перерахування, а varname - ім'я змінної. В момент створення структури можна задати кілька змінних. Вони перераховуються через кому. enum name1 {red, blue, red} varname1 varname2 varname3; Доступ до членів перерахування задається за допомогою оперетора ".". varname.red = "red";

    Висновок

    Мова Сі надає великий набір типів. Вони формуються з допомогою відповідних спецификаторов. Базові типи поділяються на числові (double, float) та знакові (int, char). Модифікатори signed і unsigned вказують на наявність знака перед символом. Модифікатори long short і відповідають за розмір комірок в пам'яті для зберігання значень змінних. Логічний тип даних має два значення: true і false. Масиви, структури відносяться до складних типів даних. Покажчик працює з адресою змінної, на яку вказує.