Reťazcové konštanty. Znakové a reťazcové konštanty

  • 21.07.2019

Konštanta je obmedzená postupnosť symbolov jazykovej abecedy, ktorá je obrazom pevného (nemenného) objektu.

Konštanty sú číselné, znakové a reťazcové. Číselné konštanty sa delia na celočíselné a reálne.

Celočíselné konštanty

Celočíselné údaje v C môžu byť reprezentované v jednej z nasledujúcich číselných sústav:


Systém reprezentácie binárnych údajov nie je v jazyku C priamo podporovaný. Môžete však použiť súbor binary.h, ktorý definuje binárne konštanty v rámci jedného bajtu.

Príklad použitia binárneho číselného systému v jazyku C:

1
2
3
4
5
6
7
8
9

#include
#include "binary.h"
int main()
{
unsigned char p = b10001001 | b00001010; // p=b10001011=139
printf("p = %dd = %xh" , p, p);
getchar(); getchar();
návrat 0;
}

Výsledok popravy

V závislosti od hodnoty celočíselnej konštanty jej kompilátor priradí jeden alebo druhý typ (char , int , long int ).

Pomocou prípony U (alebo u ) môžete reprezentovať celočíselnú konštantu ako celé číslo bez znamienka.

Napríklad konštante 200U je pridelený 1 bajt a najvýznamnejší bit sa používa na reprezentáciu jednej z číslic číselného kódu a rozsah hodnôt je od 0 do 255. Prípona L (alebo l ) vám umožňuje prideliť 8 bajtov celočíselnej konštante ( long int ).

Použitie prípon U (alebo u) a L (alebo l) v akomkoľvek poradí umožňuje, aby celočíselná konštanta bola typu unsigned long int a zaberala 64 bitov pamäte, pričom bit znamienka sa používa na reprezentáciu bitu kódu (namiesto znamienka trocha).

Skutočné konštanty

Konštanta s pohyblivou rádovou čiarkou (skutočná konštanta) je vždy reprezentovaná ako číslo s pohyblivou rádovou čiarkou s dvojnásobnou presnosťou, to znamená, že má typ double a pozostáva z nasledujúcich častí:

  • celočíselná časť - postupnosť čísel;
  • bodky - oddeľovač celých a zlomkových častí;
  • zlomková časť - postupnosť čísel;
  • exponent znak e alebo E ;
  • exponent ako celočíselná konštanta (môže byť so znamienkom).

Akákoľvek časť (ale nie obe) z nasledujúcich párov môže byť vynechaná:

  • celá alebo zlomková časť;
  • bodka alebo symbol e (E ) a exponent ako celočíselná konštanta.

Príklady reálnych konštánt

  • 3.14159
  • 2.1E5
  • 0,123 ЕЗ
  • 4037e-5

Kompilátor štandardne priraďuje dvojitý typ reálnemu číslu. Ak programátor nie je spokojný s typom, ktorý kompilátor priradí konštante, potom môže byť typ explicitne špecifikovaný v zápise konštanty pomocou nasledujúcich prípon:

  • F (alebo f ) - float pre jednoduché reálne konštanty,
  • L (alebo l ) je dlhý double pre rozšírené reálne konštanty s dvojitou presnosťou.

Príklady:

  • 3.14159F - konštanta typu float, zaberá 4 bajty;
  • 3.14L je konštanta typu long double , ktorá zaberá 10 bajtov.

Symbolické konštanty

Znaková konštanta je jeden znak, napríklad: 'z' . Ako symbolické konštanty možno použiť aj riadiace kódy, ktoré nemajú grafické znázornenie. V tomto prípade kód riadiaceho znaku začína znakom '\' (obrátená lomka).

Zvyčajne stlačenie klávesu Zadajte generuje dva riadiace znaky naraz - posun riadku (0x0A) a návrat vozíka (0x0D).

Všetky znakové konštanty sú typu char a zaberajú 1 bajt v pamäti. Hodnota symbolickej konštanty je číselná hodnota jej vnútorného kódu.

Reťazcové konštanty

Reťazcová konštanta je postupnosť znakov uzavretá v úvodzovkách, napríklad:

"Toto je reťazcová konštanta"

Citácie nie sú zahrnuté v reťazci, ale iba ho obmedzujú. Technicky je reťazcová konštanta pole znakov a na tomto základe ju možno klasifikovať ako komplexný objekt jazyka C.

Na koniec každej reťazcovej konštanty kompilátor vloží '\0' (nulový znak), aby program mohol určiť koniec reťazca. Táto reprezentácia znamená, že veľkosť reťazcovej konštanty nie je obmedzená žiadnym limitom, ale aby bolo možné určiť dĺžku reťazcovej konštanty, musí byť kompletne naskenovaná.

Pretože reťazcová konštanta pozostáva zo znakov, je typu char . Počet pamäťových buniek potrebných na uloženie reťazcovej konštanty je o 1 väčší ako počet znakov v nej (1 bajt sa používa na uloženie nulového znaku).

Znaková konštanta „x“ a reťazec jedného znaku „x“ nie sú to isté. Znaková konštanta je znak používaný na číselné vyjadrenie písmena x, zatiaľ čo reťazcová konštanta „x“ obsahuje znak „x“ a nulový znak „\0“ a zaberá 2 bajty v pamäti. Ak sú v programe reťazcové konštanty zapísané jedna po druhej cez oddeľovače, potom sa pri spustení programu umiestnia do po sebe nasledujúcich pamäťových buniek.

Laboratórium č. 1

Úvod do programovacieho jazyka C++

Cieľ:

1. Učenie sa rozhrania shell Visual C++;

2. Kompilácia a vytváranie spustiteľných súborov.

3. Štúdium hlavných dátových typov jazyka C++;

Základné dátové typy;

Premenné a konštanty;

4. Učenie operátorov:

Aritmetika;

Logické;

Porovnania;

bitový;

vstup a výstup.

5. Získanie pracovných zručností v ISP Microsoft Visual C++ 5.0.

Použité vybavenie:

Osobný počítač kompatibilný s IBM PC.

Použitý softvér:

operačný systém Windows;

Integrované programovacie prostredie Microsoft Visual C++ 5.0 (ISP Microsoft Visual C++ 5.0).

Pracovné zaradenie

1.1. Stiahnite si používateľské rozhranie Microsoft Visual C++ 5.0.

1.2. Naučte sa príkazy COI Microsoft Visual C++ 5.0.

1.3. Naučte sa základné typy údajov poskytovateľa internetových služieb Microsoft Visual C++ 5.0.

1.4. Spustite príklad 1, príklad 2, príklad 3 a úlohu učiteľa.

1.5. Zaznamenajte si protokol práce s integrovaným prostredím.

Zákazka

2.1. Spustite Microsoft Visual C++ 5.0.

2.2. Vytvorte súbor *.cpp v pracovnom adresári.

2.3. Spustite príklad 1, príklad 2, príklad 3 a úlohu učiteľa.

2.4. Zostavte schému algoritmu a napíšte program (podľa pokynov učiteľa). Zaznamenajte si protokol práce s integrovaným prostredím.

2.5. Dokončite prácu s Microsoft Visual C++ 5.0 a spustite program.

3.1. Názov laboratórnej práce.

3.2. Cieľ.

3.3. teoretickej časti.

3.4. Algoritmy vykonávaných programov.

3.5. Text spustených programov.

3.6. Záver.

Stručný popis práce

4.1. Spustite a pracujte v ISP Microsoft Visual C++ 5.0.

Ak chcete spustiť Microsoft Visual C++ 5.0 ISP, musíte spustiť ponuku Štart - Microsoft Visual C++ 5.0 - Microsoft Visual C++ 5.0.

Ak chcete začať pracovať v C++, musíte najprv vytvoriť jednoduchú konzolovú aplikáciu, na to musíte postupovať podľa týchto krokov:

Ø Spustite Visual C++ (Štart®Programy® Microsoft Visual C++ 5.0.® Microsoft Visual C++ 5.0 . );

Ø V ponuke „Súbor“ vyberte možnosť „Nový“. Uistite sa, že v dialógovom okne "Nový" je vybratá karta "Projekty". V zozname typov projektov vyberte "Win32 Console Application";

Ø Vyberte adresár projektu ‚Umiestnenie‘ (C:\students\‘group*) a názov projektu ‚Názov projektu‘, napríklad „Prvý“ a kliknite na tlačidlo „OK“. Budete mať „Prvé triedy“;

Ø Potom znova vyberte „Nový“, ale so záložkou „Súbory“ a vyberte „Zdrojový súbor C++“. V zozname ‚Názov súboru‘ zadajte názov, napríklad „Prvý“ Potom kliknite na „OK“ a vytvorí sa súbor „First.cpp“.

Všeobecná štruktúra programu.

Našou úlohou je zvážiť všeobecnú štruktúru programu napísaného v C / C ++, to znamená, že celý zdrojový text je umiestnený v jednom súbore:

Ø Oblasť direktív preprocesora (zahrnúť, definovať...);

Ø Popis vlastných dátových typov;

Ø Neúplné deklarácie funkcií;

Ø Popis globálnych premenných;

Ø Deklarácia funkcie 1;

Ø Deklarácia funkcie 2;

Ø Deklarácia funkcie Main().

Táto schéma nemá taký pevný poriadok ako v Pascale, považuje sa však za tradičnú.

Program pozostáva z jednej alebo viacerých procedúr, ktoré sa tradične nazývajú funkcie. Jedna funkcia, ktorá je povinná v každom programe, by sa mala nazývať hlavná. Slúži ako vstupný bod do programu a následne volá ďalšie funkcie.

Minimálny program vyzerá takto:

Void main(void)

Pozostáva z hlavnej funkcie, ktorá neberie a nevracia žiadne parametre (void). Telo funkcie, uzavreté v zložených zátvorkách, tiež neobsahuje žiadne užitočné operátory.

Premenné môžu byť deklarované vo vnútri tela funkcie aj mimo tela. V prvom prípade k nim možno pristupovať len z tela danej funkcie (lokálne deklarácie), v druhom prípade z ľubovoľnej funkcie (globálne deklarácie).

Vykonávanie programu začína telom hlavnej funkcie, ktorá môže nadobudnúť množinu hodnôt z príkazového riadku. Telo main obsahuje volania ďalších funkcií, ako zo štandardných knižníc, tak aj tých, ktoré sú definované používateľom v texte programu.

Vykonávanie programu sa štandardne ukončí po ukončení hlavného programu, ale môže sa kedykoľvek prerušiť, ak dôjde ku kritickej chybe, alebo ak je uvedené inak. To sa zvyčajne vykonáva pomocou funkcie exit() z knižnice stdlib.

Tlač reťazca na obrazovku

V prvom rade si napíšme program, ktorý vypíše na obrazovku reťazec.

Program musí obsahovať funkciu s názvom main(). Pripisuje sa jej úloha začiatku programu. Táto funkcia nie je preddefinovaná prekladačom, nemôže byť preťažená a jej typ závisí od implementácie. Hlavná funkcia môže byť definovaná takto:

Príklad 1:

// Prvý program v C++

#include

void main()

cout<< “Thise is my first program\n” << endl;

Ak chcete spustiť program, musíte ho najskôr uložiť. Prejdite do ponuky Súbor a tam klikni Uložiť všetko. Potom ho musíte zostaviť (skompilovať), na to musíte vykonať nasledujúce kroky:

Ø Prejdite do ponuky ( Build®Build*.exe) alebo klávesovou skratkou (F7), spustí sa vytváranie programu. Ak kompilátor nezobrazil chybové hlásenie, ktoré je možné zobraziť v okne, ktoré sa zobrazí nižšie, môžete program bezpečne spustiť;

Ø Teraz stačí spustiť program, na to prejdite do ponuky ( Build®Execute *.exe.) alebo klávesová skratka (Ctrl+F5);

Ø Váš program beží.

Linka #include povie kompilátoru, aby povolil štandardné funkcie vstupného a výstupného toku, ktoré sa nachádzajú v iostream.h. Bez týchto opisov výraz cout << "Toto je môj prvý program" by nedávalo zmysel. Hlavné štandardné knižnice sú uvedené v tabuľke 1.

Stôl 1.

Základné štandardné knižnice C/C++

Prevádzka<< ("поместить в") пишет свой первый аргумент во второй (в данном случае, строку "Toto je môj prvý program" na štandardný výstup cout). Reťazec je postupnosť znakov uzavretých v úvodzovkách. V reťazci spätná lomka \ nasledovaná ďalším znakom označuje jeden špeciálny znak; v tomto prípade je \n znak nového riadku. Výstup znaky pozostávajú z " Toto je môj prvý program" a nový riadok, ktoré definujú funkciu s názvom hlavné. Každý program musí obsahovať funkciu s názvom hlavné a program sa spustí vykonaním tejto funkcie.

Vstup z klávesnice

Nasledujúci (skôr podrobný) program vás vyzve na zadanie počtu palcov. Potom, čo to urobíte, vytlačí zodpovedajúci počet centimetrov.

Príklad 2:

#include

Void main()

int palec = 0; // palec - palec

cout<< "inches";

cin >> palec;

cout<< inch;

cout<< " in = ";

cout<< inch*2.54;

cout<< " cm\n";

Prvý riadok funkcie hlavné() popisuje celočíselnú premennú palec. Jeho hodnota sa načíta pomocou operácie >> ("take from") na štandardnom vstupnom toku cin.

V tomto príklade je jeden príkaz na výstupný príkaz; je to príliš dlhé. Operácia stiahnutia<< можно применять к ее собственному результату, так что последние четыре команды вывода можно было записать одним оператором:

cout<< inch << " in = " << inch*2.54 << " cm\n";

Komentáre

Často je užitočné vložiť do programu text, ktorý je určený len ako komentár pre osobu čítajúcu program a kompilátor v programe ho ignoruje. V C++ to možno urobiť jedným z dvoch spôsobov.

Znaky /* začínajú komentár končiaci na */. Celá táto sekvencia znakov je ekvivalentná znaku medzery (napríklad medzery). Toto je najužitočnejšie pre viacriadkové komentáre a vynechávanie častí programu počas úprav, ale majte na pamäti, že /* */ komentáre sa nedajú vnoriť.

Znaky // začínajú komentár, ktorý končí na konci riadku, na ktorom sa nachádzajú. Opäť platí, že celá postupnosť znakov je ekvivalentná medzere. Táto metóda je najužitočnejšia pre krátke komentáre. Znaky // môžu byť použité na komentovanie znakov /* alebo */ a znaky /* môžu byť zakomentované //.

4.6. Dátové typy v C++

Pred napísaním programu je potrebné definovať dátové typy. V C++ existuje niekoľko bežne používaných dátových typov (nie všetky):

Ø Číselné celé čísla so znamienkom (int, short, char);

Ø Číselné podpísané zlomkové (float, double, long (v C), long double (v C);

Ø Číselné bez znamienka - všetky typy uvedené vyššie s pridaním nepodpísané;

Ø Char možno použiť aj ako typ postavy .

Štandardné typy a veľkosti príslušných buniek sú uvedené nižšie.

Rozsah Veľkosť (Bt)
char -128..127;
unsigned char 0..255;
int -32768..32767;
unsigned int 0..65535;
dlhá -2 147 483 648..2 147 483 647;
nesignované dlhé 0..4 294 967 295;
plavák 3,4e-38..3,4e+38;
dvojitá 1,7e-308..1,7e+308;
dlhá dvojka 3,4e-4932..3,4e+4932.

Premenná v C/C++ je deklarovaná takto:

int iMyVariable;

Vo vyššie uvedenom vyhlásení je iMojaPremenná deklarovaná ako celočíselná premenná. A tu je deklarácia premennej typu char :

Char cMyChar;

Dátové typy ako int , plavák , char a dlhý , sú neoddeliteľnou súčasťou C/C++ a nemusíte písať žiadny kód, aby ste kompilátoru povedali, čo tieto slová znamenajú. C/C++ vám tiež umožňuje deklarovať svoje vlastné, špeciálne dátové typy.

Príklad 3 ukazuje program, ktorý vytlačí veľkosť dátových typov v bajtoch. Príklad 3:

#include

Void main(void)

cout<< " (unsigned)int = " << sizeof(int) << endl;

cout<< " (unsigned)short = " << sizeof(short) << endl;

cout<< " (unsigned)char = " << sizeof(char) << endl;

cout<< " (unsigned)float = " << sizeof(float) << endl;

cout<< " (unsigned)double = " << sizeof(double) << endl;

cout<< " (unsigned)long = " << sizeof(long) << endl;

cout<< " (unsigned)long double = " << sizeof(long double) << endl;

Na zistenie veľkosti bunky zodpovedajúceho typu stačí napísať do programu veľkosť(Typ). Faktom je, že pre rôzne operačné systémy sa veľkosť bunky rovnakého typu môže líšiť (napríklad typ int v 16-bitových a 32-bitových operačných systémoch, 1 bajt a 2 bajty).

Operátor veľkosť vypočíta veľkosť svojho operandu v bajtoch. Operand musí byť buď výraz, ktorý sa nevyhodnocuje, alebo názov typu v zátvorkách. Operátor veľkosť nemožno použiť na funkciu, bitové pole, nedefinovanú triedu, typ void alebo pole bez špecifikovaných hraníc indexu. Bajt nie je definovaný jazykom žiadnym spôsobom, s výnimkou výsledku operácie. veľkosť, presne tak veľkosť(znak) je 1.

4.7. Premenné

Premenná je názov pamäťového miesta, ktoré sa musí použiť na uloženie upravovanej hodnoty, aby bola pamäť dostupná programu na použitie, musí mu byť priradená. Existuje statické a dynamické prideľovanie pamäte. K prideleniu statickej pamäte dochádza v čase kompilácie a veľkosť bloku sa nedá zmeniť počas vykonávania programu. Dynamická pamäť sa prideľuje počas vykonávania a jej veľkosť môže závisieť od aktuálneho stavu programu. Oblasť pamäte priradená programu sa používa na ukladanie údajov.

Ak sa údaje môžu počas prevádzky meniť, hovoria o použití premenných, ak nie, potom o konštantách. Ak chcete získať prístup k premennej alebo konštante, musíte použiť názov alebo adresu.

Premenná je pomenovaná oblasť pamäte, ktorej hodnota sa môže meniť počas vykonávania programu.

Všetky premenné musia byť deklarované na ich použitie, aby kompilátor alokoval statickú pamäť, takže potrebuje poznať jej presnú veľkosť. Ak chcete deklarovať premennú, musíte zadať: meno, adresa, veľkosť(definované podľa typu), význam.

Ak sa deklarácia nachádza vo vnútri páru zložených zátvoriek (napríklad v tele funkcie), potom sa deklarované premenné považujú za lokálne a pamäť pre ne je alokovaná v oblasti zásobníka programu a počiatočná hodnota nie je definovaná.

Ak je premenná deklarovaná mimo tiel funkcií, potom sa považuje za globálnu a je umiestnená v dátovom segmente a jej počiatočná hodnota je nula. Volá sa deklarácia premennej s priradenou počiatočnou hodnotou inicializácia.

Ak má funkcia argument, mali by ste deklarovať premenné, ktoré budú mať svoje hodnoty, tieto premenné sa nazývajú formálne nastavenia.

V C++ sú dva klasifikátory, ktoré riadia prístup a úpravy: konšt a nestály.

Konštanta je pomenovaná oblasť pamäte, ktorej hodnotu nemožno počas vykonávania programu zmeniť. Konštantám je vždy pri deklarácii priradená hodnota a neskôr sa nedajú zmeniť. Zadajte premenné konšt sa nedajú zmeniť, ale dajú sa inicializovať.

kvalifikátor nestály hovorí kompilátoru, že hodnotu premennej je možné zmeniť implicitne. Napríklad, odovzdajte adresu globálnej premennej časovaču operačného systému a použite ju na počítanie reálneho času. V tomto prípade sa obsah premennej zmení bez explicitného vykonania akéhokoľvek príkazu priradenia.

Jazyk C/C++ poskytuje konštanty riadiaceho znaku, ktoré sú uvedené v tabuľke 2.

Tabuľka 2

Kontrolné znakové konštanty

Najznámejšie znaky služby sú posun riadku (kód 13), návrat vozíka (kód 10), tabuľka (kód 9). Na ich nastavenie v programe ako symbolické konštanty sa používa kombinácia dvoch viditeľných znakov, a to „\n“, „\r“, „\t“. Konštrukcia "\\" sa používa na znázornenie znaku "lomka".

V C sú štyri špecifikátory úložiska: externý, statický, register, auto.

Tieto špecifikátory informujú kompilátor, ako uložiť deklarovanú premennú. Všeobecná forma vyhlásenia s použitím týchto špecifikátorov je:


Podobné informácie.


Znaková konštanta je nejaký abecedný znak uzavretý v jednoduchých úvodzovkách: "<символ_алфавита>" .

Príklady znakových konštánt: " a" " B" "=" "+" " F" "[" " d".

Hodnota znakovej konštanty je celé číslo rovné (American Standard Code for Information Interchange) danému znaku. Znaková konštanta je typu int(char) a je reprezentovaná 16(8)-bitovou hodnotou.

Existujú kódy, ktoré sa pri tlači nezobrazujú, ale vykonávajú niektoré akcie, napríklad nový riadok (LF), pípnutie, pípnutie - BELL) atď. Na klávesnici nie sú žiadne samostatné klávesy pre takéto kódy a keď keď sa zadávajú z klávesnice, píšu sa kombináciou určitých kláves: napríklad stlačenie kláves Ctrl a G spôsobí, že do pamäte vstúpi „pípnutie“ kódu a keď sa zobrazí znak, ktorý má hodnotu kód "pípnutie", počítač zapípa.

Vynára sa otázka: ako použiť takéto kódy v programe? Na tento účel poskytuje C dve metódy, ktoré priamo súvisia so znakovými konštantami.

Prvý spôsob . Akýkoľvek znak v môže byť definovaný ako znaková konštanta takto:

"\ddd" alebo "\xHHH",

kde ddd- osmičkové a HHH hexadecimálny kód znaku. Počiatočné nuly v reprezentácii znakového kódu môžu byť vynechané. V súlade s tým teda možno zapísať vyššie uvedené príklady symbolických konštánt

" a"

" B"

" F"

" d"

Znak, ktorý spôsobí pípnutie, sa zapíše ako „\07“ a znak, ktorý spôsobí tlač na nový riadok, sa zapíše ako „\x0A“.

Druhý spôsob spočíva v tom, že často používané nezobraziteľné znaky nie je potrebné písať kódmi, ale možno pre ne použiť vyhradené symboly. Tieto znaky v C sú priradené triede riadiacich znakov uvedených v tabuľke 3.3.

Tabuľka 3.3. Riadiace znaky

symbol C ASCII znak Názov symbolu
Nový riadok
Vodorovná karta
Vertikálna karta
Krok späť
Vrátenie vozíka
Odoslanie formulára
Horn
jediný citát
dvojitý citát
Spätné lomítko
Otázka

Ak sa riadiace znaky vyskytnú napríklad vo výstupnom riadku, potom spôsobia príslušnú akciu. Prvých šesť riadiacich znakov sú znaky, ktoré riadia činnosť tlačového zariadenia: znak " Nový riadok"prenesie tlač na začiatok nasledujúceho riadku; znak" horizontálna záložka" posunie tlač na aktuálnom riadku na nasledujúcu pevnú pozíciu riadku. Štandardne sa pozície riadkov fixujú každých 8 znakov. Pevné pozície je možné zmeniť pomocou takzvaných ESC sekvencií, ktorých formát je popísaný v dokumentácii tlačiarne.

symbol " vertikálna záložka" posunie tlač na začiatok po sebe nasledujúcich pevných čísel riadkov, ktoré sú tiež určené sekvenciou ESC tlačiarne.

symbol " krok späť" vytvára posun tlače v aktuálnom riadku o jednu pozíciu späť, t. j. umožňuje vytlačiť určitý počet znakov na rovnakej známosti.

symbol " odoslanie formulára" preskočí zvyšok aktuálneho textu a spustí tlač od ďalšieho nového hárka.

Siedmy znak tabuľky" pípnutie" iniciuje pípnutie. Zvyšné štyri znaky nie sú v skutočnosti riadiace znaky, ale sú zahrnuté v tabuľke, pretože majú podobné rezervované označenia. Ich zvyčajné použitie v reťazcových konštantách (pozri nasledujúcu časť 3.1.4.) ako znaky môže viesť k chyba a jeho použitie v tomto formulári vám umožní vytlačiť ich vo výstupnom riadku.

Toto neplatí pre symbol " otázka". Znak "otázka" bol s najväčšou pravdepodobnosťou medzi vyhradenými znakmi kvôli tomu, že v C existuje operácia označená znakom "?" a v niektorých situáciách by to mohlo viesť k nejednoznačnému výkladu jazykových konštruktov. Znak "otázka" , ako znaková konštanta, môže byť napísaný ktorýmkoľvek z vyššie uvedených spôsobov: "?" "\77" "x3F" "\?" .

Na záver tejto časti venujeme pozornosť skutočnosti, že symbolické konštanty sú celočíselné konštanty. Preto je možné písať aj dvojznakové konštanty, napríklad ako: "ab" "ta" "ma" "do". V tomto prípade sa však s nimi musí zaobchádzať ako s int dátami. Ak sa pokúsite priradiť dvojznakovú konštantu premennej typu char, tak sa to stane strata sekundy symbol.

Dvojznaková konštanta môže byť napísaná ako "\ddC" alebo ako "\xHHc", kde C je abecedný znak iný ako osmičková číslica a c je znak iný ako hexadecimálna číslica. Napríklad „\538“ je to isté ako „+8“, pretože kompilátor interpretuje \53 ako kód osmičkového znaku + nasledovaný znakom 8. Podobne „\x6DQ“ je vnímaný ako „mQ“, t.j. \x6D je hexadecimálny kód znaku m, za ktorým nasleduje znak Q. Neodporúčame používať takéto „triky“, hoci C v tomto smere poskytuje najširšie možnosti.

Tabuľka typov znakov

Ak chcete pracovať s rozšírenou znakovou sadou, ako je napríklad Unicode, zadajte wchar_ t(široký znak, 16 bitov v systéme Windows, 32 bitov v systéme GNU/Linux, ale môže byť reprezentovaný aj ako 8 bitová hodnota.

Štandard C a C++ z roku 2011 zaviedol pevné typy znakov char16_t a char32_t poskytnúť jednoznačnú reprezentáciu 16-bitových a 32-bitových konverzií formátov Unicode.

Konštanty

Konštanty sa nazývajú nemenné veličiny. Existujú celočíselné, reálne, znakové a reťazcové konštanty. Kompilátor, ktorý pridelil konštantu ako token, ju odkáže na jeden z typov podľa jej vzhľadu.

Formáty konštánt zodpovedajúcich každému typu sú uvedené v tabuľke. 7.1.

Tabuľka 7.1.

Konštanty v C++

Neustále Formátovať Príklady
Celý Desatinné: Postupnosť desatinných číslic, ktorá nezačína od nuly, pokiaľ to nie je číslo nula 8, 0, 199226
Osmičková: nula nasledovaná osmičkovými číslicami (0,1,2,3,4,5,6,7) 01, 020, 07155
Hexadecimálne: Ox alebo OX nasledované hexadecimálnymi číslicami (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F) 0xA, 0x1 B8, 0x00FF
reálny Desatinné číslo: [číslice], [číslice] 5.7, .001, 35.
Exponenciálne: [číslice][.][číslice](E|e)[+|-[číslice] 0,2E6, 0,11e-3, 5E10
Symbolický Jeden alebo dva znaky uzavreté v apostrofoch "A", "u", "*", "db" "\0" "\n", "\012" "\x07\x07"
reťazec Postupnosť znakov uzavretých v úvodzovkách "Bola tu Vasia", "\tHodnota r=\0xF5\"

Ak je potrebné vytvoriť záporné celé číslo alebo reálnu konštantu, potom sa znamienko unárnej operácie zmeny znamienka (-) umiestni pred konštantu, napríklad: -218, -022, -0x3C, -4,8, -0,1 e4.

Skutočná konštanta v exponenciálnom formáte je reprezentovaná ako mantisa a exponent. Mantisa sa píše vľavo od exponentu (E alebo e), poradie je vpravo od znamienka. Hodnota konštanty je definovaná ako súčin mantisy a mocniny 10 umocnené na určené poradie. Všimnite si, že medzery v čísle nie sú povolené a bodka, nie čiarka, sa používa na oddelenie časti celého čísla od zlomková časť.

Typ konštanty si môže programátor nastaviť sám. Celú časť alebo zlomkovú časť možno vynechať, ale nie obe. Ak sú zadané obe časti, vyžaduje sa znak bodka.

Znakové konštanty pozostávajúce z jedného znaku zaberajú jeden bajt v pamäti a majú štandardný typ char. Dvojznakové konštanty zaberajú dva bajty a sú typu int, pričom prvý znak je umiestnený v byte s nižšou adresou.

Znak spätnej lomky sa používa na vyjadrenie:

kódy, ktoré nemajú grafický obrázok (napr.
\a - zvukový signál, \n - presun kurzora na začiatok nasledujúceho riadku);

apostrof ("), spätné lomítko (\), otáznik (?) a úvodzovky (");

· ľubovoľný znak pomocou jeho hexadecimálneho alebo osmičkového kódu, napríklad \073, \0xF5. Číselná hodnota musí byť medzi 0 a 255.

Postupnosti znakov, ktoré začínajú spätnou lomkou, sa nazývajú manažéri, alebo únikové sekvencie. Tabuľka 7.2. sú uvedené ich prípustné hodnoty. Úniková sekvencia sa interpretuje ako jeden znak. Ak za spätnou lomkou bezprostredne nasleduje znak, ktorý nie je uvedený v tabuľke 7.2, výsledok interpretácie nie je definovaný. Ak sa v sekvencii číslic nájde neplatný znak, považuje sa to za koniec číselného kódu.


Tabuľka 7.2.

Únikové sekvencie v C++

Únikové sekvencie možno použiť aj v reťazcových konštantách nazývaných inak reťazcové literály. Napríklad, ak chcete napísať citát do reťazca, predchádza mu lomka, pomocou ktorej ho kompilátor odlíši od citátu, ktorý reťazec vymedzuje:

"Vydavateľstvo \"Peter\""

Všetky reťazcové literály sú kompilátorom považované za odlišné objekty.

Reťazcové konštanty, oddelené v programe iba medzerami, sa pri kompilácii spoja do jednej. Dlhú reťazcovú konštantu je možné umiestniť na viacero riadkov pomocou spätnej lomky, za ktorou nasleduje nový riadok ako spojovník. Tieto znaky kompilátor ignoruje a nasledujúci riadok považuje za pokračovanie predchádzajúceho. Napríklad linka

    Celočíselné konštanty

    Konštanty s pohyblivou rádovou čiarkou

    Symbolické konštanty

    Struny

    nula

    Konšt

    Enumerácie

C++ vám dáva možnosť zapisovať hodnoty základných typov: znakové konštanty, celočíselné konštanty a konštanty s pohyblivou rádovou čiarkou. Navyše nula (0) môže byť použitá ako konštanta akéhokoľvek typu ukazovateľa a reťazce znakov sú konštanty typu char. Môžete tiež zadať symbolické konštanty. Symbolická konštanta je názov, ktorého hodnotu nemožno v rámci jeho rozsahu meniť. V C++ existujú tri druhy symbolických konštánt:

    akákoľvek hodnota akéhokoľvek typu môže byť pomenovaná a použitá ako konštanta pridaním kľúčového slova const do jej popisu;

    množinu celočíselných konštánt možno definovať ako enum;

    akýkoľvek názov vektora alebo funkcie je konštanta.

Celočíselné konštanty

Celočíselné konštanty prichádzajú v štyroch formách: desiatkové, osmičkové, hexadecimálne a znakové konštanty. Desatinné čísla sa používajú najčastejšie a vyzerajú tak, ako by ste mohli očakávať:

ich desiatkové ekvivalenty sú 0, 2, 63, 83. V hexadecimálnom zápise tieto konštanty vyzerajú takto:

0x00x20x3f0x53

Písmená a, b, c, d, e a f alebo ich ekvivalenty veľkých písmen sa používajú na označenie čísel 10, 11, 12, 13, 14 a 15. Osmičkové a hexadecimálne zápisy sú najužitočnejšie na písanie množiny bitov; používanie týchto zápisov na vyjadrenie obyčajných čísel môže viesť k prekvapeniam. Napríklad na počítači, kde je int reprezentované ako binárne dvojkové hexadecimálne celé číslo, 0xffff je záporné desiatkové číslo -1; ak by sa na reprezentáciu celého čísla použilo viac bitov, bolo by to 65535.

Konštanty s pohyblivou rádovou čiarkou

Konštanty s pohyblivou rádovou čiarkou sú typu double. Rovnako ako v predchádzajúcom prípade musí kompilátor varovať pred konštantami s pohyblivou rádovou čiarkou, ktoré sú príliš veľké na to, aby ich mohli reprezentovať. Tu sú niektoré konštanty s pohyblivou rádovou čiarkou:

1,23 ,23 0,23 1,1,0 1,2e10 1,23e-15

Všimnite si, že medzera sa nemôže vyskytovať uprostred konštanty s pohyblivou rádovou čiarkou. Napríklad 65.43 e-21 nie je konštanta s pohyblivou rádovou čiarkou, ale štyri samostatné lexikálne znaky (tokeny):

65,43e-21

a vyvolá chybu syntaxe.
Ak chcete mať konštantu s pohyblivou rádovou čiarkou typu float, môžete ju definovať takto:

Const float pi = 3,14159265;

Symbolické konštanty

Hoci v C++ neexistuje samostatný dátový typ znaku, presnejšie, znak môže byť uložený v celočíselnom type, ktorý má pre znaky špeciálny a pohodlný zápis. Znaková konštanta je znak uzavretý v jednoduchých úvodzovkách; napríklad "a" alebo "0". Takéto znakové konštanty sú v skutočnosti znakové konštanty pre celočíselnú hodnotu znakov v znakovej sade stroja, na ktorom bude program bežať (čo nemusí byť nevyhnutne rovnaké ako znaková sada používaná na počítači, kde je program kompilovaný). Preto, ak používate počítač používajúci znakovú sadu ASCII, potom hodnota "0" bude 48, ale ak váš počítač používa EBCDIC, potom to bude 240. Použitie znakových konštánt namiesto desiatkového zápisu robí program viac prenosný. Niektoré znaky majú aj štandardné názvy, ktoré používajú opačnú lomku \\ ako znak escape:

Napriek svojmu vzhľadu je každý jeden symbol. Znak môžete reprezentovať aj ako jedno-, dvoj- alebo trojmiestne osmičkové číslo (znak \\, za ktorým nasledujú osmičkové číslice), alebo jedno-, dvoj- alebo trojmiestne hexadecimálne číslo (za ktorým nasleduje \\x hexadecimálnymi číslicami). Napríklad:

"\\6" "\\x6" 6 ASCII ack
"\\60" "\\x30" 48 ASCII "0"
"\\137" "\\x05f" 95 ASCII "_"

To vám umožňuje reprezentovať každý znak v znakovej sade stroja a najmä vkladať takéto znaky do znakových reťazcov. Použitie číselného zápisu znakov robí program neprenosným medzi strojmi s rôznymi znakovými sadami.

Struny

Reťazcová konštanta je postupnosť znakov uzavretých v úvodzovkách:

"toto je reťazec"

Každá reťazcová konštanta obsahuje o jeden znak viac, než sa zdá; všetky končia prázdnym znakom "\\0" s hodnotou 0.

Napríklad:

sizeof("asdf")==5;

Keďže reťazec je typu "vektor s príslušným počtom znakov", tak "asdf" je typu char. Prázdny reťazec je napísaný "" (a je typu char). Všimnite si, že pre každý reťazec s platí strlen(s)==veľkosť(s)-1, pretože strlen() nerešpektuje koncovú 0.
Konvenciu spätného lomítka na reprezentáciu negrafických znakov možno použiť aj v rámci reťazca. To umožňuje reprezentovať dvojité úvodzovky a znak escape \\ v reťazci. Najbežnejším znakom tohto druhu je jednoznačne znak nového riadku "\\n".

Napríklad:

Cout<< "гудок в конце сообщения\\007\\n"

Kde 7 je hodnota ASKII znaku bel (zvonček).

Nie je možné mať v reťazci „skutočný“ nový riadok:

"Toto nie je reťazec,
syntaktická chyba

Riadok však môže mať spätnú lomku, za ktorou bezprostredne nasleduje nový riadok; obe budú ignorované.

Napríklad:

Cout<< "здесь все \\
dobre"

vytlačí

Všetko je tu ok

Nový riadok, pred ktorým je znak escape (spätná lomka), nevedie k novému riadku v riadku, je to len konvencia záznamu.

V reťazci je možné mať prázdny znak, ale väčšina programov nebude predpokladať, že za ním sú znaky. Napríklad reťazec "asdf\\000hjkl" bude štandardnými funkciami ako strcpy() a strlen() spracovaný ako "asdf".

Pri zápise číselnej konštanty do reťazca pomocou osmičkového alebo hexadecimálneho zápisu je rozumné vždy použiť trojmiestne číslo. Čítanie záznamu je dosť ťažké bez toho, aby ste sa museli obávať, či znak za konštantou je číslica alebo nie. Preskúmajte tieto príklady:

Char v1 = "a\\x0fah\\0129"; // "a" "\\xfa" "h" "\\12" "9"
char v2 = "a\\xfah\\129"; // "a" "\\xfa" "h" "\\12" "9"
char v3 = "a\\xfad\\127"; // "a" "\\xfad" "\\127"

A majte na pamäti, že dvojciferný hexadecimálny zápis na strojoch s 9-bitovým bajtom nebude stačiť.

nula

Nula (0) môže byť použitá ako konštanta akéhokoľvek typu typu celé číslo, float alebo pointer. Na adrese 0 sa nenachádza žiadny objekt. Typ nuly je určený kontextom. Zvyčajne (ale nie nevyhnutne) je reprezentovaný množinou všetkých nulových bitov vhodnej dĺžky.

Konšt

Kľúčové slovo const možno pridať do deklarácie objektu, aby sa tento objekt stal konštantou a nie premennou.

Napríklad:

const int model = 145;
const int v = (1, 2, 3, 4);

Keďže konštante nemožno nič priradiť, musí sa inicializovať. Deklarovanie niečoho ako const zabezpečí, že sa jeho hodnota nezmení v rozsahu:

model = 145; // chyba
model++; // chyba

Všimnite si, že const upravuje typ, to znamená, že obmedzuje spôsob použitia objektu namiesto toho, aby špecifikoval, ako má byť konštanta umiestnená. Preto je napríklad celkom rozumné a niekedy užitočné opísať funkciu ako vracajúci const:

Const char* peek(int i)
{
návrat súkromný[i];
}

Funkciu, ako je táto, možno použiť na umožnenie niekomu prečítať riadok, ktorý nemožno prepísať alebo prepísať (tým niekým).

Na druhej strane môže kompilátor zneužiť skutočnosť, že objekt je konštanta, niekoľkými spôsobmi (samozrejme v závislosti od toho, aký je inteligentný). Najzrejmejšie je, že pre konštantu nemusí byť pridelená žiadna pamäť, pretože kompilátor pozná jej hodnotu. Konštantný inicializátor je tiež často (ale nie vždy) konštantný výraz, čo znamená, že ho možno vyhodnotiť v čase kompilácie. Vektor konštánt však zvyčajne potrebuje alokovať pamäť, pretože kompilátor vo všeobecnosti nedokáže zistiť, na ktoré prvky vektora sa vo výrazoch odkazuje. Na mnohých strojoch však aj v tomto prípade možno dosiahnuť zvýšenie účinnosti umiestnením konštantných vektorov do pamäte určenej len na čítanie.

A používanie ukazovateľa zahŕňa dva objekty: samotný ukazovateľ a objekt, na ktorý sa ukazuje. Predpona deklarácie ukazovateľa s const robí objekt, ale nie samotný ukazovateľ, konštantou.

Napríklad:

Const char*pc = "asdf"; // ukazovateľ na konštantu
pc = "a"; // chyba
pc="ghjk"; // dobre

Operátor const* sa používa na opis samotného ukazovateľa, a nie špicatý objekt, ako ukazovateľa const.

Napríklad:

Char *const cp = "asdf"; // konštantný ukazovateľ
cp="a"; // dobre
cp="ghjk"; // chyba

Aby boli oba objekty konštantné, oba musia byť deklarované ako const.

Napríklad:

Const char *const cpc = "asdf"; // const pointer na const
cpc="a"; // chyba
cpc="ghjk"; // chyba

Objekt, ktorý je konštantný pri prístupe cez jeden ukazovateľ, môže byť premennou, keď sa k nemu pristupuje inými spôsobmi. Toto je obzvlášť užitočné pre parametre funkcií. Deklarovaním parametra ukazovateľa ako const sa funkcii zabráni modifikovať objekt, na ktorý ukazuje.

Napríklad:

Char* strcpy(char* p, const char* q); // nemožno zmeniť q

Ukazovateľ na konštantu môže mať priradenú adresu premennej, pretože z toho nemôže byť žiadna škoda. Adresu konštanty však nemôžete priradiť k ukazovateľu, ktorý nebol obmedzený, pretože by to zmenilo hodnotu objektu.

Napríklad:

Int a = 1;
const c = 2;
const* p1 = // ok
const* p2 = // ok
int* p3 = // chyba
*p3 = 7; // zmení hodnotu c

Ako obvykle, ak je typ v deklarácii vynechaný, predpokladá sa, že je int.

Enumerácie

Existuje iná metóda na definovanie celočíselných konštánt, ktorá je niekedy pohodlnejšia ako použitie konst.

Napríklad:

Enum( ASM, AUTO, BREAK);

Definuje tri celočíselné konštanty, nazývané enumerátory, a priraďuje im hodnoty. Keďže hodnoty enumerátora sú predvolene priradené od 0 vo vzostupnom poradí, je to ekvivalentné zápisu:

Const ASM = 0;
const AUTO = 1;
const BREAK = 2;

Enum možno pomenovať.

Napríklad:

Enum kľúčové slovo ( ASM, AUTO, BREAK );

A názov enum sa stáva synonymom pre int, nie novým typom. Deklarovanie premenného kľúčového slova, nie len int, môže dať programátorovi aj kompilátorovi náznak, že použitie je zámerné.

Napríklad:

Kľúčové slovo;
prepínač (kľúč) (
prípad ASM:
// niečo robí
prestávka;
prípad BREAK:
// niečo robí
prestávka;
}

Spôsobí, že kompilátor vydá varovanie, pretože sa používajú iba dve z troch hodnôt kľúčových slov.

Hodnoty enumerátora môžete nastaviť aj explicitne.

Napríklad:

enum int16(
znak=0100000, // znak
most_significant=040000, // najvýznamnejšie
najmenej_významné=1 // najmenej významné
};

Takéto hodnoty nemusia byť odlišné, rastúce alebo pozitívne.