Видове данни в "C". C програмиране

07.03.2020

Типове данни в C - клас от данни, чиито стойности имат сходни характеристики. Типът определя вътрешното представяне на данните в паметта. Най-основните типове данни са boolean, integer, floating point, string, указатели.

типизиране

С динамичното въвеждане, променливата се свързва с типа по време на инициализацията. Оказва се, че дадена променлива в различни части на кода може да има различни типове. Поддържане на динамично въвеждане Java скрипт Python, Ruby, PHP.

Статичното типизиране е обратното на динамиката. При деклариране променливата получава тип, който не се променя допълнително. C и C ++ езиците са точно такива. Този метод е най-удобен за писане на сложен код и много грешки се елиминират на етапа на компилиране.

Типове данни

Езиците са неформално разделени на силно типизирани и слабо типизирани. Силното въвеждане предполага, че компилаторът ще генерира грешка, ако очакваните и действителните типове не съвпадат.

х = 1 + "2"; // error - не можете да добавите знак към номера

Пример за слабо типизиране.

х = 1 + "2"; 3

Проверките за типово одобрение се извършват от системата за безопасност на типа. Възниква грешка при писане, например, когато се опитвате да използвате номер като функция. Съществуват нетипизирани езици. За разлика от типичните, те позволяват извършването на всякакви операции върху всеки обект.

Класове памет

Променливите, независимо от вида им, имат свой обхват и време на съществуване.

C код

Класове на паметта:

  • автоматично;
  • статично;
  • ученик;
  • регистрирайте.

Всички променливи на езика C са локални по подразбиране. Те могат да се използват само във функция или блок. След завършване на функцията, тяхната стойност се унищожава.

Статичната променлива също е локална, но извън нейния блок може да има различна стойност, а между повикванията за функция стойността се запазва.

Външната променлива е глобална. Той е достъпен във всяка част на кода и дори в друг файл.

Регистърната променлива препоръчва на компилатора да съхранява стойността в RAM.

Спецификаторите на тип данни в C не могат да бъдат посочени в такива случаи:

  1. Всички променливи в блока не са променливи, съответно, ако се приеме използването на този конкретен клас памет, автоматичният спецификатор не е посочен.
  2. Всички функции, обявени извън блока или функцията, са глобални по подразбиране, така че спецификаторът extern не е задължителен.

Основни типове

За да укажете прости типове, укажете квалификаторите int, char, float или double. Променливите могат да бъдат заместени модификатори без знака (unsigned), подписани (подписани), къси, дълги, дълги.

Основни типове

По подразбиране всички числа са подписани, съответно, могат да бъдат в диапазона само от положителни числа. За да дефинирате променлива от тип char, както е подписано, се пише подписан знак. Дълги, дълги и къси показват колко място в паметта е разпределено за съхранение. Най-големият е дълъг, най-малкият е къс.

Char е най-малкият тип данни в C. За съхраняване на стойности се разпределя само 1 байт памет. Променливите от тип характер обикновено се присвояват символи, по-рядко - числа. Цитират се стойности на знаците.

char a = “a”;

char b = 2;

Типът int съхранява цели числа, неговият размер не е дефиниран - той заема до 4 байта памет, в зависимост от архитектурата на компютъра.

int a = 12;

Изричното преобразуване на неподписана променлива се дава като:

unsigned int a = 12;

Имплицитно изглежда така:

int a = 12u;

Поплавък и двойно дефиниране на числа с точка. Числата с плувка са представени като -2.3 или 3.34. Двойната се използва за по-голяма точност - след десетичния разделител се показват повече цифри. Този тип заема повече място от паметта, отколкото плаващият.

двойно a = 12.4567;

Void е нула. Той дефинира функции, които не връщат нищо. С този квалификатор в аргументите на методите се посочва празна стойност. Указателите, които могат да приемат всякакъв тип данни, също се дефинират като невалидни.

Булев логически тип

Използва се при условни проверки и цикли. Той има само две значения:

  • истината;
  • лъжа
Истинска лъжа

Булевите стойности могат да бъдат преобразувани в стойност int. Истината е еквивалентна на единица, лъжа на нула. Преобразуването на типа се осигурява само между bool и int, в противен случай компилаторът ще генерира грешка.

int x = 123;

if (x) {// Грешка: "Не може да се имплицитно преобразува тип 'int' в 'bool'"

};

if (x! = 0) // C # начин

{

}

Струни и масиви

Масивите са сложни типове, дадени в C. PL не работи с низове по същия начин като Javascript или Ruby. В C всички низове са масиви от елементи със символна стойност. Струни завършват с нулев байт “”.

Какво представляват масивите

Деклариране на низ в C: char b [] = {'s', 't', 'r', 'i', 'n', 'g', ''};

Нишката също се обявява в обобщен вид.

char a [] = "низ";

a [1] === b [1]; // 't'

Целочислени или символни масиви се декларират по същия начин: име на променлива тип данни [размер на масив].

int a [100];

char b [5];

Подобен синтаксис показва, че размерът на int стойността не може да бъде по-голям от 100 знака. Когато създавате масив, в паметта се запазват няколко клетки за съхраняване на елементи. Следователно, за обработка на масиви от данни с неизвестна размерност или такава, която ще се промени, паметта се разпределя динамично.

Многомерните масиви се декларират по следния начин:

int a [2] [3];

Когато създавате този масив, в този случай се разпределя пространство за съхраняване на два вложени масива, които се състоят от три елемента.

Инициализиране на многомерен масив:

int a [2] [3] = {1, 2, 3, 4, 5, 6};

а [1]; // [1, 2, 3]

а [2]; // [4, 5, 6]

Връзки и указатели

Указатели - основната характеристика на езика, те отварят възможности за работа с паметта. Те предават информация за местоположението на друга променлива в паметта. Преди употреба те, подобно на други променливи, се декларират под формата на указател тип *. Типът е тип променлива, указателят е име на показалеца.

Видове указатели

За да зададете показалеца на стойността на друга променлива, се използват връзки. Те предават адреса на дадена променлива и се използват като безопасен указател.

int a = 2;

int * указател;

указател = & a;

Връзките ви позволяват да работите с показалеца както с обекта.

Връзки в C

В този случай & a ще върне 0x7340cad2a25c, * pointer - 2, но показалеца без “*” ще върне 0x7340cad2a25c.

Чрез промяна на стойността, ние не променяме адреса му, така че показалеца ще се отнася и до 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)

или

а [3];

В горния пример можете да видите, че добавянето на показалеца работи по различен начин. Към тях могат да се приложат различни аритметични операции.

Указател към масив се задава както следва:

char (* pa) [10];

Но масивът от указатели изглежда така:

char * pc [10];

структура

Структурата е вид данни в С, което прави писането и разбирането на програмите по-лесни, помага за групиране на данни.

Структури в С

Структура като масив представлява колекция от данни, но нейните елементи могат да бъдат от различен тип, а препратката се прави по име, а не по индекс.

{

type1 variable_name1;

type1 variable_name1;

/ други членове на данните;

}

След затваряне на къдрави скоби е обявена структурна променлива.

структурна книга

{

char title [20];

автор [30];

двоен отлив;

} book1, book2, * ptr_bk;

Достъпът до полетата се осигурява от оператора “.”. За достъп до заглавието на променливата пишем:

book1.title;

По този начин, ние инициализираме променливата

book1.title = „String“;

За насочване към указатели използвайте оператора "->".

ptr_bk-> гласове;

или оператор ".".

(* (ptr_bk)).

Вторият вид списъци с този е изброяване (изброяване). Той съдържа цели числа.

enum {червено, синьо, зелено};

Примерът обявява анонимно изброяване, съдържащо три члена - червено, синьо, зелено. Преди достъп до елементите се декларира изброена променлива.

enum name1 {червено, синьо, червено} име;

В този случай, name1 е името на изброяването, а varname е името на променливата. В момента на създаване на структурата можете да зададете няколко променливи. Те са разделени със запетаи.

enum name1 {червено, синьо, червено} varname1, varname2, varname3;

Достъпът до членовете на изброяването се задава чрез оператора ".".

varname.red = "червено";

заключение

Езикът С осигурява голям набор от типове. Те се формират с подходящи квалификатори.

Базовите типове са разделени на числови (двойни, плаващи) и подписани (int, char). Подписаните и неподписаните модификатори показват наличието на символ пред символа. Кратките и дългите модификатори са отговорни за размера на клетките в паметта за съхраняване на стойностите на променливите. Логическият тип данни има две стойности: true и false. Масивите, структурите се отнасят до сложни типове данни. Показалецът работи с адреса на променливата, към която сочи.