Pochopení datových typů, přetypování a struktur v C

5

C přísně kontroluje, co je uloženo v paměti. Netuší. Musíte přesně uvést, jaká data ukládáte. To není jen vybíravost. To ovlivňuje, jak váš program funguje, kolik paměti používá a zda jsou vaše výpočty správné nebo nesmyslné.

Standardní typy proměnných

V C jsou tři standardní typy proměnných.

Celé číslo: int
Toto je 4bajtové celé číslo. Pracuje s celými čísly.

Číslo s pohyblivou řádovou čárkou: float
Toto je 4bajtové číslo s plovoucí desetinnou čárkou. Pracuje s desetinnými zlomky.

Postava: char
Toto je jeden bajtový znak. Například „a“ nebo „3“. Řetězec v C je prostě pole takových znaků.

Pak jsou odvozené typy. Používají se, když tři standardní typy nestačí.

  • double : 8bajtové číslo s plovoucí desetinnou čárkou. Vyšší přesnost.
  • short : 2bajtové celé číslo. Méně paměti, menší rozsah hodnot.
  • unsigned short nebo unsigned int : Tyto typy fungují pouze s kladnými celými čísly. Žádný náznak. Pokud potřebujete sledovat počty obyvatel nebo velikosti dávek, je to často správná volba.

Operátory a priorita operátorů

Operátoři v C vypadají povědomě.

  • “+” dodatek
  • - odčítání
  • Dělení /
  • * násobení
  • % zbytek dělení

S dělením ale opatrně. Operátor / provede celočíselné dělení, pokud jsou oba operandy celá čísla. Jinak se provede dělení s plovoucí desetinnou čárkou.

Podívejte se na tento kód:

Vydává hodnotu s plovoucí desetinnou čárkou, protože „a“ je deklarováno jako typ „float“. Ale hodnota a bude 3,0. Proč? Protože kód nejprve provedl celočíselné dělení. 10 děleno 3 je 3. Výsledek je 3. Tato 3 je poté převedena na 3,0, když je uložena v “a”. Přesnost byla ztracena dříve, než hodnota vůbec vstoupila do proměnné.

Priorita operátorů v jazyce C se řídí standardními pravidly. Násobení a dělení se provádí před sčítáním a odčítáním.

Výsledek výrazu 5+3*4 je 17. Ne 32. Operátor * má vyšší prioritu než +. Toto můžete přepsat pomocí závorek. (5+3)*4 se rovná 32. Nejprve se vypočítá 5+3.

Priorita bude později matoucí. Když se objeví ukazatele, věci se zkomplikují. Ale zatím si pamatujte: násobte a rozdělte před sčítáním a odečítáním.

Typové odlitky

C umožňuje převádět typy za běhu. To se často provádí pomocí ukazatelů. Stane se to také automaticky při přiřazení k určitým typům.

Ve výše uvedeném příkladu byl výsledek celého čísla 10/3 automaticky převeden na float. Ale co když potřebujete zlomkovou část?

Přetypování typu se provádí umístěním názvu typu do závorek před hodnotu.

Nahraďte a=10/3; za a=(float)10/3;.

Nyní se „a“ rovná 3,33333. Číslo 10 je převedeno na číslo s pohyblivou řádovou čárkou před dělením. K dělení dochází v kontextu čísel s pohyblivou řádovou čárkou. Výsledek si zachová svá desetinná místa.

typedef

Pojmenované uživatelem definované typy můžete deklarovat v C pomocí operátoru typedef. To je běžné v C kódu.

To vám umožní deklarovat booleovské typy. Staré standardy C nemají vestavěný typ bool, takže toto je řešení.

Pokud se vám nelíbí slovo “float”, můžete napsat:

Potom později:

Umístěte příkazy typedef kamkoli do programu. Jen se ujistěte, že jsou před prvním použitím.

Struktury

Strukturuje proměnné skupiny C do jednoho balíčku.

Pokaždé, když chcete deklarovat strukturu typu rec, musíte napsat struct rec. Je snadné zapomenout. Pokud vynecháte slovo struct, kompilátor vyvolá chyby.

Kód můžete zkrátit:

Zde jsou deklarace typu a proměnná r deklarovány ve stejném příkazu.

Nebo použijte typedef pro název struktury. Pokud vás nebaví pokaždé psát struct rec r :

Poté deklarujte položky zadáním:

Odkazujte na pole s tečkou. r.a = 5;.

Pole

Pole se deklarují zadáním velikosti po normální deklaraci.

Pole jsou souvislé bloky paměti. Přístup k indexu mimo rozsah je nedefinované chování. Program může skončit s chybou. Data mohou být poškozena. Může se zdát, že vše funguje, až to najednou nefunguje.

Zvyšování a snižování

C má zkratky pro běžné operace.

  • „i = i + 1;“ se změní na „i++;“.
  • “i = i – 1;” se změní na “i–;”.
  • „i = i + 3;“ se změní na „i += 3;“.
  • i = i * j; se změní na i *= j;

To není jen syntaktický cukr. Často jsou kompilovány do efektivnějšího strojového kódu. Použijte je.

C Chyby, kterým je třeba se vyhnout

Operátor / se dvěma celými čísly je past. Zahodí desetinnou část. Před dělením vždy zkontrolujte své typy. Pokud potřebujete přesnost, přetypujte nejprve jeden z operandů na float nebo double.

Myslete na to pokaždé, když použijete tento operátor. Jinak budou vaše čísla špatná. A ladění problémů zahrnujících celočíselné dělení je utrpení.

Zkuste to sami

  • Experimentujte s litím typu. Zkuste int, char, float. Podívejte se, co se stane, když je smícháte.
  • Vytvořte řadu záznamů. Napište kód pro seřazení tohoto pole podle jednoho celočíselného pole. To vás naučí, jak pracovat s ukazateli, rozložením paměti a řízením toku.

Na detailech záleží v C. Chybí jeden typ a celý program se přeruší. Udělejte to správně a bude to fungovat rychle.