Новини високих технологій
» » Типи даних в "Сі". Програмування на мові Сі"

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

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

Типізація

При динамічної типізації мінлива зв'язується з типом на момент ініціалізації. Виходить, що змінна в різних ділянках коду може мати різні типи. Динамічну типізацію підтримують 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. Масиви, структури відносяться до складних типів даних. Покажчик працює з адресою змінної, на яку вказує.
Цікаво по темі
Структури Сі та їх передача
Структури Сі та їх передача
Структури в мові Сі преднаначаются для об'єднання декількох значень різного типу. За допомогою структури ними легко маніпулювати. Структура нагадує
Що таке динамічні масиви C++?
Що таке динамічні масиви C++?
Визначимося для початку з тим, що таке динамічний масив. З часів Сі існують масиви, але їх особливістю був фіксований розмір, який зазначався при
Printf C: опис, форматування, приклади
Printf C: опис, форматування, приклади
Стандартна функція консольного виводу в мові C – printf. Опис її міститься в заголовочном файлі stdio.h. За допомогою цієї функції можна виводити
Типи змінних у Паскалі: опис, властивості, приклади
Типи змінних у Паскалі: опис, властивості, приклади
Уміння використовувати основні типи змінних у Паскаль дозволяє користувачеві ефективно вирішувати завдання різного рівня складності. Кількість цих
Javascript Array для збереження необмеженої кількості змінних
Javascript Array для збереження необмеженої кількості змінних
Логічно масив займає проміжне положення між змінними і об'єктами. Практично не слід надавати особливого значення словам. У програмі є змінні і код.
SQL (типи даних): таблиця
SQL (типи даних): таблиця
Коротка, але важлива інформація про основні типи даних мови SQL. Об'єм пам'яті, що виділяється при визначенні типів даних.