Typy dat v "C". C programování

7. 3. 2020

Datové typy v C, třída dat, jejichž hodnoty mají podobné charakteristiky. Typ definuje interní reprezentaci dat v paměti. Nejzákladnější typy dat jsou booleovské, celočíselné, plovoucí, řetězcové, ukazatele.

Psaní

Při dynamickém psaní je proměnná při inicializaci spojena s typem. Ukazuje se, že proměnná v různých částech kódu může mít různé typy. Podpora dynamického psaní Java skript Python, Ruby, PHP.

Statické psaní je opakem dynamického. Po prohlášení bude proměnná přijata typ, který se dále nezmění. Jazyky C a C ++ jsou přesně takové. Tato metoda je nejvhodnější pro psaní komplexního kódu a mnoho chyb je vyloučeno ve fázi kompilace.

Datové typy

Jazyky jsou neformálně rozděleny do silně psaných a slabě psaných. Silné psaní znamená, že kompilátor generuje chybu, pokud očekávané a skutečné typy neodpovídají.

x = 1 + "2"; // error - nelze přidat číslo k číslu

Příklad slabého psaní.

x = 1 + "2"; // 3

Kontroly typového schválení provádějí bezpečnostní systém typu. Chyba při psaní dochází například při pokusu o použití čísla jako funkce. Neexistují žádné jazyky. Na rozdíl od zadaných typů umožňují provádět jakékoliv operace na každém objektu.

Třídy paměti

Proměnné, bez ohledu na jejich typ, mají svůj vlastní rozsah a dobu existence.

C kód

Třídy paměti:

  • auto;
  • statické;
  • externě;
  • zaregistrovat.

Všechny proměnné v jazyce C jsou ve výchozím nastavení místní. Mohou být použity pouze uvnitř funkce nebo bloku. Po dokončení funkce je jejich hodnota zničena.

Statická proměnná je také lokální, ale mimo její blok může mít jinou hodnotu a mezi volání funkcí se hodnota zachová.

Externí proměnná je globální. Je k dispozici v libovolné části kódu i v jiném souboru.

Proměnná registru doporučuje, aby kompilátor ukládal hodnotu v paměti RAM.

Specifikátory datového typu v C nemusí být v takových případech uvedeny:

  1. Všechny proměnné uvnitř bloku nejsou proměnné, pokud se předpokládá použití této konkrétní třídy paměti, není určen automatický specifikátor.
  2. Všechny funkce deklarované mimo blok nebo funkci jsou ve výchozím nastavení globální, takže externí specifikátor je volitelný.

Základní typy

Chcete-li zadat jednoduché typy, zadejte int, char, float nebo double qualifiers. Proměnné mohou být nahrazeny modifikátory nepodepsané (nepodepsané), podepsané (podepsané), krátké, dlouhé, dlouhé.

Základní typy

Ve výchozím nastavení jsou všechna čísla podepsaná, resp. Mohou být v rozmezí pouze kladných čísel. Chcete-li definovat proměnnou typu char jako podepsána, je zapsán podepsaný znak. Dlouhé, dlouhé a krátké údaje udávají, kolik paměti je přiděleno pro ukládání. Největší je dlouhá, nejmenší je krátká.

Char je nejmenší typ dat v jazyce C. Pro ukládání hodnot je přidělen pouze 1 bajt paměti. Proměnné typu znaků jsou obvykle přiřazeny znaky, méně často - čísla. Hodnoty znaků jsou uvedeny.

char a = "a";

char b = 2;

Typ int ukládá celá čísla, jejich velikost není definována - v závislosti na architektuře počítače trvá až 4 bajty paměti.

int a = 12;

Výslovná konverze nepodepsané proměnné je uvedena jako:

nepodepsaný int = 12;

Implicitní vypadá takto:

int a = 12u;

Plovoucí a dvojité definování čísel s tečkou. Čísla float jsou reprezentována jako -2,3 nebo 3,34. Dvakrát se používá pro větší přesnost - po desetinném oddělovači jsou označeny více číslic. Tento typ zabírá více místa než plovák.

dvojité a = 12,4567;

Neplatnost je prázdná. Definuje funkce, které nevracejí nic. Pomocí tohoto kvalifikátoru je prázdná hodnota zadána v argumentech metod. Ukazatele, které mohou mít jakýkoli typ dat, jsou také definovány jako neplatné.

Boolean Boolean Typ

Používá se při podmíněných kontrolách a cyklech. Má pouze dva významy:

  • pravda;
  • lež
Pravá lež

Booleovské hodnoty lze převést na hodnotu int. Pravda je ekvivalentní jedné, falešná až nula. Konverze typu je poskytována pouze mezi bool a int, jinak kompilátor generuje chybu.

int x = 123;

if (x) {// Error: "Nelze implicitně převést typ 'int' na 'bool'"

};

pokud (x! = 0) // cesta C #

{{

}}

Řetězce a matice

Políčka jsou složité typy uvedené v C. PL nepracuje s řetězci stejným způsobem jako Javascript nebo Ruby. V řetězci C jsou všechny řetězce pole matice elementů hodnoty znaku. Řetězec končí nulovým bajtem "".

Co jsou pole

Prohlášení o řetězci v jazyce C: char b [] = {'s', 't', 'r', 'i', 'n', 'g', ''};

Řetězec je také deklarován v souhrnné podobě.

char a [] = "řetězec";

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

Celá čísla nebo znaková pole jsou deklarována stejným způsobem: název proměnné typu dat [velikost pole].

int a [100];

char b [5];

Podobná syntaxe označuje, že velikost hodnoty int nesmí být větší než 100 znaků. Při vytváření pole je v paměti uloženo množství buněk pro ukládání prvků. Pro zpracování datových polí s neznámou dimenzí nebo pro změnu je tedy dynamicky přidělena paměť.

Multidimenzionální pole jsou deklarována takto:

int a [2] [3];

Při vytváření tohoto pole je v tomto případě přidělen prostor pro ukládání dvou vnořených polí, které se skládají ze tří prvků.

Inicializace vícerozměrného pole:

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

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

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

Odkazy a ukazatele

Ukazatele - hlavní rys jazyka, otevírají příležitosti pro práci s pamětí. Poskytují informace o umístění jiné proměnné v paměti. Před použitím jsou jako jiné proměnné deklarovány ve formě ukazatele typu *. Typ je typ proměnné, ukazatel je název ukazatele.

Typy ukazatelů

Chcete-li nastavit ukazatel na hodnotu jiné proměnné, použijí se odkazy. Procházejí adresou proměnné a používají se jako bezpečný ukazatel.

int a = 2;

int * ukazatel;

ukazatel = & a;

Odkazy umožňují práci s ukazatelem jako u objektu.

Odkazy v C

V takovém případě & & vrátí 0x7340cad2a25c, * ukazatel - 2, ale ukazatel bez "*" vrátí 0x7340cad2a25c.

Změnou hodnoty nezměníme její adresu, takže ukazatel bude také odkazovat na hodnotu 0x7340cad2a25c, ale změní její hodnotu.

Ukazatel na jiné ukazatel je deklarován ve tvaru:

int w = 100;

int * x = & w;

int ** z = & x;

Ukazatel na pole pracuje trochu jinak.

int c [5] = [1, 2, 3, 4, 5], * a;

Deklarovali jsme množinu celých čísel a ukazatel int a.

V tomto případě ukazatel nevede k samotnému poli, ale pouze k prvnímu prvku. Takže,

a = c;

a

a = & c [0]; // 1

rovnocenné.

Nyní se můžete obrátit na třetí prvek pole pomocí výrazu

* (a + 3)

nebo

a [3];

V příkladu výše můžete vidět, že přidávání ukazatele funguje jiným způsobem. K nim mohou být použity různé aritmetické operace.

Ukazatel na pole je určen takto:

znak (* pa) [10];

Ale řada ukazatelů vypadá takto:

char * pc [10];

Struktury

Struktura je typ dat v jazyce C, který usnadňuje psaní a pochopení programů, pomáhá seskupovat data.

Struktury v C

Struktura jako pole reprezentuje sbírku dat, ale její prvky mohou mít jiný typ a odkaz se provádí jménem, ​​nikoliv indexem.

{{

type1 variable_name1;

type1 variable_name1;

// ostatní členové dat;

}}

Konstrukční proměnná je deklarována po uzavření kudrnatých podpěr.

struct kniha

{{

char title [20];

char autor [30];

double cast;

} kniha1, kniha2, * ptr_bk;

Přístup k polím poskytuje operátor ".". Pro přístup k názvu proměnné se píše:

book1.title;

Proto inicializujeme proměnnou

book1.title = "Řetězec";

Chcete-li odkazovat na ukazatele, použijte operátor "->".

ptr_bk-> cast;

nebo operátor ".

(* (ptr_bk)).

Druhým druhem seznamů s tímto je enum (výčet). Obsahuje celočíselné proměnné.

enum {červená, modrá, zelená};

Příklad uvádí anonymní výčet obsahující tři členy červené, modré, zelené. Před přístupem k prvkům je deklarovaná proměnná deklarována.

enum name1 {červená, modrá, červená} varname;

V tomto případě název1 je název výčtu a varname je název proměnné. V okamžiku vytvoření struktury můžete nastavit několik proměnných. Jsou odděleny čárkami.

enum name1 {červená, modrá, červená} varname1, varname2, varname3;

Přístup k členům výčtu je určen pomocí operátoru ".".

varname.red = "červená";

Závěr

Jazyk C poskytuje velkou sadu typů. Jsou tvořeny pomocí vhodných kvalifikátorů.

Typy základny jsou rozděleny na číselné (dvojité, plovoucí) a podepsané (int, char). Podpisové a nepodepsané modifikátory označují přítomnost znaku před symbolem. Krátké a dlouhé modifikátory jsou odpovědné za velikost buněk v paměti pro ukládání hodnot proměnných. Logický typ dat má dvě hodnoty: true and false. Pole, struktury se týkají komplexních datových typů. Ukazatel pracuje s adresou proměnné, na kterou odkazuje.