Proměnné v C ++
Proměnná C ++ nám poskytuje funkci pojmenovaného úložiště. Umožňuje programátorovi manipulovat s daty podle potřeby. Každá proměnná má typ v C ++. Typ proměnné pomáhá určit velikost a rozložení mapy paměti proměnné, rozsah hodnot, které lze v této paměti uložit, a sadu operací, které lze na ni použít.
V tomto výukovém programu C ++ se naučíte:
- Proměnné v C ++
- Základní typy proměnných v C ++
- Pravidla deklarace proměnných v C ++
- Variabilní datové typy C ++
- Název proměnné nebo identifikátory
- Const Qualifier v C ++
- Rozsah proměnných v C ++
- Převod proměnného typu
- Zaregistrujte proměnné
- Únikové sekvence
Základní typy proměnných v C ++
Zde jsou základní typy proměnných C ++:
Int:
Celé číslo je číselný literál (spojený s čísly) bez jakékoli zlomkové nebo exponenciální části. Příklad. 120, -90 atd.
Dvojnásobek:
Je to hodnota s plovoucí desetinnou čárkou s dvojitou přesností. Příklad: 11.22, 2.345
Char:
Znakový literál je vytvořen vložením jednoho znaku do jednoduchých uvozovek. Například: 'a', 'm', 'F', 'P', '}' atd.
Plovák:
Literál s plovoucí desetinnou čárkou je číselný literál, který má buď zlomkovou formu, nebo exponentovou formu. Například: 1.3, 2.6
Řetězcové literály:
Řetězcový literál je posloupnost znaků uzavřených v uvozovkách. Například: „Jak se máš?“
Bool:
Obsahuje logickou hodnotu true nebo false.
Pravidla deklarace proměnných v C ++
Zde je několik běžných pravidel pro pojmenování proměnné:
- Název proměnné C ++ může mít pouze abecedy, čísla a podtržítko.
- Název proměnné C ++ nemůže začínat číslem.
- Názvy proměnných by neměly začínat velkým písmenem.
- Název proměnné používaný v C ++ nemůže být klíčové slovo. Například int je klíčové slovo, které se používá k označení celých čísel.
- Název proměnné C ++ může začínat podtržítkem. Není to však považováno za dobrou praxi.
Variabilní datové typy C ++
C ++ definuje celou sadu primitivních typů
Void typ nemá žádný spojený hodnoty s ní a mohou být použity jen v několika málo případech. Je to nejčastěji jako návratový typ funkcí, které nevracejí hodnotu.
K aritmetické typy obsahují znaky, celá čísla, logické hodnoty a čísla s plovoucí desetinnou čárkou. Aritmetický typ, pokud je dále rozdělen do 2 kategorií
- Typy s plovoucí desetinnou čárkou . Plovoucí (nebo plovoucí typ) představují desetinná čísla. Standard IEEE určuje minimální počet platných číslic. Většina překladačů obvykle poskytuje větší přesnost než zadané minimum. Typicky jsou plováky reprezentovány 32 bity, zdvojnásobením 64 bitů a dlouhými zdvojnásobeními buď 96 nebo 128 bitů.
- Integrální typy (které zahrnují typy znaků, celá čísla a booleovské typy). Boolean typ má pouze dva typy hodnot: true nebo false. Existuje několik typů znaků , z nichž většina existuje na podporu internacionalizace. Nejzákladnějším typem znaků je char. Znak má stejnou velikost jako jeden bajt stroje, což znamená jeden bajt.
Tyto integrální typy mohou být podepsány nebo unsigned.
Podepsaný typ : Představují záporná nebo kladná čísla (včetně nuly). V podepsaném typu musí být rozsah rovnoměrně rozdělen mezi hodnoty + ve a -ve. 8bitový znak se znaménkem bude tedy obsahovat hodnoty od -127 do 127.
Nepodepsaný typ : V nepodepsaném typu jsou všechny hodnoty> = 0. 8bitový nepodepsaný znak může obsahovat 0 až 255 (včetně).
Název proměnné nebo identifikátory
Identifikátory mohou být složeny z několika písmen, číslic a znaku podtržítka nebo z jejich kombinace. Na délku jména není stanoven žádný limit.
Identifikátory musí
- začínají písmenem nebo podtržítkem („_“).
- A rozlišují velká a malá písmena; velká a malá písmena jsou odlišná:
// definuje čtyři různé proměnné int
int guru99, gurU99, GuRu99, GURU99;
Jazyk C ++ si pro své použití vyhrazil některá jména.
Existuje mnoho přijímaných konvencí pro pojmenování proměnných v různých programovacích jazycích. Dodržování těchto pravidel může zlepšit čitelnost programu.
- Identifikátor by měl poskytnout alespoň určitý údaj o jeho významu.
- Názvy proměnných jsou obvykle malá písmena-guru99, nikoli Guru99 nebo GURU99.
- Třídy, které definujeme, obvykle začínají velkým písmenem.
- Identifikátory, které obsahují více slov, by měly vizuálně rozlišovat každé slovo. Například guru99_website není guru99website.
Deklarace a definice proměnných C ++
Deklarace proměnné zpřístupní programu název v rozsahu, ve kterém je definována. Příklad:
int a=5;int b;char c='A';
int a,b;a=b=1000;
List initializationint a(5);int b{5};
Const Qualifier v C ++
Předpokládejme, že existuje proměnná buffsize, která udává počet vstupů, které mají být od uživatele převzaty. Tady nechceme měnit hodnotu buffsize v celém programu. Chceme definovat proměnnou, jejíž hodnota by se neměla měnit.
V takovém případě použijte klíčové slovo const
const int bufSize = 512; // input buffer size
To definuje bufSize jako konstantu. Jakýkoli pokus o přiřazení nebo změnu bufSize způsobí chybu.
Tady nemůžeme změnit hodnotu objektu const poté, co jej vytvoříme, musí být povinně deklarován a inicializován. Jinak kompilátor vyvolá chybu.
const int i = get_size(); // ok: initialized at run timeconst int j = 42; // ok: initialized at compile timeconst int k; // error: k is uninitialized constint i = 42;const int ci = i; // ok: the value in i is copied into ci
Rozsah proměnných v C ++
Rozsah je rozsah programu, kde má proměnná význam. Většinou stejný název lze použít k označení různých entit v rámci různých oborů. Proměnné jsou viditelné od bodu, kde jsou deklarovány, až do konce oboru, ve kterém se jejich deklarace objeví.
#includeint main(){int sum = 0;// sum values from 1 through 10 inclusivefor (int val = 1; val <= 10; ++val)sum += val; // equivalent to sum = sum + valcout << "Sum of 1 to 10 inclusive is "<< sum < Tento program definuje 3 názvy, viz, main, sum a val. Používá název jmenného prostoru std spolu s dalšími dvěma jmény z tohoto oboru názvů-cout a endl.
- Název funkce „hlavní“ je definován mimo složené závorky. Název funkce hlavní - stejně jako většina ostatních názvů definovaných mimo funkci - má globální rozsah. Což znamená, že jakmile budou deklarovány, jména, která jsou v globálním rozsahu, jsou přístupná v celém programu.
- Proměnná suma je definována v rámci rozsahu bloku, který je tělem hlavní funkce. Je k němu přístup z jeho deklaračního bodu a po zbytek těla hlavní funkce. Ne však mimo něj. To znamená, že proměnná částka má rozsah bloku .
- Proměnná val je definována v rozsahu příkazu „for statement“. Může být snadno použit v tomto prohlášení, ale ne jinde v hlavní funkci. Má místní působnost .
Vnořený obor
Rozsah může obsahovat další obory. Obsažený (nebo vnořený) obor se označuje jako vnitřní obor. Obsahující obor je vnější obor.
#includeusing namespace std;// Program for illustration purposes only: It is bad style for a function// to use a global variable and also define a local variable with the same nameint reused = 42; // reused has global scopeint main(){int unique = 0; // unique has block scope// output #1: uses global reused; prints 42 0cout << reused << " " << unique << endl;int reused = 0; // new, local object named reused hides global reused// output #2: uses local reused; prints 0 0cout << reused << " " << unique << endl;// output #3: explicitly requests the global reused; prints 42 0cout << ::reused << " " << unique << endl;return 0;} Výstup č. 1 se objeví před místní definicí opětovného použití. Tedy tento výstup
příkaz je ten, který používá znovu použitý název definovaný v globálním rozsahu. Výstup tohoto prohlášení
42 0
Výstup # 2 nastává po lokální definici opětovného použití. Nyní je v rozsahu. Proto tento druhý výstupní příkaz jednoduše používá místní objekt s názvem znovu použit, nikoli globální a výstupy
0 0
Výstup # 3 přepíše výchozí pravidla pro obor pomocí operátoru oboru. Globální obor nemá název. Když tedy operátor oboru (: :) má prázdnou levou stranu. Interpretuje to jako požadavek na načtení názvu na pravé straně globálního oboru. Výraz tedy používá globální opětovné použití a výstupy
42 0
Převod proměnného typu
Proměnnou jednoho typu lze převést na jiný. Je znám jako „Konverze typu“. Podívejme se na pravidla pro převod různých typů proměnných C ++:
Přiřazení hodnoty non-bool proměnné bool přinese hodnotu false, pokud je hodnota 0 a jinak true.
bool b = 42; // b is truePřiřazení bool jednomu z dalších aritmetických typů získá 1, pokud je bool true a 0, pokud je bool false.
bool b = true;int i = b; // i has value 1Přiřazením hodnoty s plovoucí desetinnou čárkou proměnné typu int získáte hodnotu, která je zkrácena. Uložená hodnota je část před desetinnou čárkou.
int i = 3.14; // i has value 3Přiřazení hodnoty int proměnné typu float způsobí, že se zlomková část stane nulovou. Přesnost se obvykle ztratí, pokud má celé číslo více bitů, než kolik plovoucí proměnná pojme.
Int i=3;double pi = i; // pi has value 3.0Pokud se pokusíme přiřadit hodnotu mimo rozsah proměnné typu bez znaménka, výsledkem bude zbytek hodnoty% (modulo)
Například 8bitový nepodepsaný typ char může obsahovat hodnoty od 0 do 255 včetně. Přiřazení hodnoty mimo tento rozsah bude mít za následek, že kompilátor přiřadí zbytek této hodnoty modulo 256. Podle výše uvedené logiky tedy přiřazení -1 8bitovému nepodepsanému znaku dává tomuto objektu hodnotu 255.
unsigned char c = -1; // assuming 8-bit chars, c has value 255Pokud se pokusíme přiřadit hodnotu mimo rozsah objektu podepsaného typu, výsledek je nepředvídatelný. Je to nedefinováno. Může se zdát, že program funguje zvenčí, nebo může selhat nebo může vytvářet hodnoty smetí.
signed char c2 = 256; // assuming 8-bit chars, the value of c2 is undefinedKompilátor použije stejný typ převodu, když použijeme hodnotu jednoho typu, kde se očekává hodnota jiného typu.
int i = 42;if (i) // condition will evaluate as truei = 0;Pokud tato hodnota = 0, pak je podmínka false; všechny ostatní (nenulové) hodnoty dávají hodnotu true. Ze stejného konceptu, když použijeme bool v aritmetickém výrazu, se jeho hodnota vždy převede na 0 nebo 1. Výsledkem je, že použití boolu v aritmetickém výrazu je obvykle téměř jistě nesprávné.
Upozornění: Nemíchejte podepsané a nepodepsané typy
Výrazy, které kombinují podepsané a nepodepsané, mohou přinést překvapivé a nesprávné výsledky, když je podepsaná hodnota záporná. Jak je uvedeno výše, podepsané hodnoty se automaticky převedou na nepodepsané.
Například v aritmetickém výrazu jako
x* yPokud x je -1 a y je 1, a pokud jsou obě x a y int, pak je hodnota podle očekávání -1.
Pokud x je int a y jsou nepodepsané, pak hodnota tohoto výrazu závisí na tom, kolik bitů má celé číslo na kompilačním stroji. Na našem stroji tento výraz dává 4294967295.
Zaregistrujte proměnné
K proměnným registrů je rychlejší přístup ve srovnání s proměnnými paměti. Proměnné, které se často používají v programu C ++, lze tedy do registrů vkládat pomocí klíčového slova register . Klíčové slovo register říká kompilátoru, aby danou proměnnou uložil do registru. Je na kompilátoru, zda jej umístí do registru nebo ne. Obecně platí, že kompilátoři sami provádějí různé optimalizace, které zahrnují vkládání některých proměnných do registru. Počet proměnných registrů v programu C ++ není nijak omezen. Kompilátor ale nemusí proměnnou uložit do registru. Důvodem je, že paměť registrů je velmi omezená a operační systém ji nejčastěji používá.
Definovat:
register int i;Komentáře
Komentáře jsou části kódu ignorované kompilátorem. Umožňuje programátorovi dělat si poznámky v příslušných oblastech zdrojového kódu / programu. Komentáře přicházejí buď v blokové formě, nebo jako jednotlivé řádky. Komentáře k programu jsou vysvětlující prohlášení. Může být zahrnut do kódu C ++, který pomáhá komukoli číst jeho zdrojový kód. Všechny programovací jazyky umožňují určitou formu komentářů. C ++ podporuje jednořádkové i víceřádkové komentáře.
- Jednořádkové komentáře jsou ty, které začínají // a pokračují až do konce řádku. Pokud je poslední znak v řádku komentáře \, pak bude komentář pokračovat v dalším řádku.
- Víceřádkové komentáře začínají / * a končí * /.
/* This is a comment *//* C++ comments can also* span multiple lines*/Únikové sekvence
Některé znaky, například backspace a kontrolní znaky, nemají žádný viditelný obraz. Takové znaky jsou známé jako netisknutelné znaky. Ostatní znaky (jednoduché a uvozovky, otazník a zpětné lomítko) mají v mnoha programovacích jazycích zvláštní význam.
Naše programy nejsou schopny použít žádnou z těchto postav přímo. Místo toho můžeme použít únikovou sekvenci k reprezentaci takového char. Úniková sekvence začíná zpětným lomítkem.
Programovací jazyk C ++ definuje několik escape sekvencí:
Co to dělá?
Charakter
Nový řádek
\ n
Svislá karta
\proti
Obrácené lomítko
\\
Návrat vozíku
\ r
Vodorovná karta
\ t
Backspace
\ b
Otazník
\?
Formfeed
\F
Výstraha (zvonek)
\A
Dvojitá nabídka
\ "
Jednoduchá nabídka
\ '
Používáme únikovou sekvenci, jako by to byl jeden znak:
cout << '\n'; // prints a newlinecout << "\tguru99!\n"; // prints a tab followed by "guru99!" and a newlineMůžeme také napsat zobecněné řídicí sekvence \ x následované jednou nebo více hexadecimálními číslicemi. Nebo použijeme \ následované jednou, dvěma nebo třemi osmičkovými číslicemi. Zobecněná řídicí sekvence představuje číselnou hodnotu znaku. Některé příklady (za předpokladu znakové sady Latin-1):
\7 (bell) \12 (newline) \40 (blank)\0 (null) \115 ('M') \x4d ('M')Můžeme použít předdefinované únikové sekvence, protože používáme jakýkoli jiný znak.
cout << "Hi \x4dO\115!\n"; // prints Hi MOM! followed by a newlinecout << '\115' << '\n'; // prints M followed by a newlinesouhrn
- Proměnná C ++ nám poskytuje funkci pojmenovaného úložiště.
- Typy proměnných C ++: int, double, char, float, string, bool atd.
- Obsažený (nebo vnořený) obor se označuje jako vnitřní obor a obsahující obor je vnější obor.
- Proměnnou jednoho typu lze převést na jiný. Je znám jako „Konverze typu“.
- K proměnným registrů je rychlejší přístup ve srovnání s proměnnými paměti.
- Komentáře jsou části kódu ignorované kompilátorem.
- Některé znaky, například backspace a kontrolní znaky, nemají žádný viditelný obraz.