Kako podesiti pametne telefone i računare. Informativni portal

A2.5.2. Karakterne konstante

Konstante

Konstante nazivaju se nepromjenjive veličine. Postoje cjelobrojne, realne, karakterne i string konstante. Prevodilac, nakon što je identifikovao konstantu kao token, klasifikuje je kao jedan od tipova na osnovu njenog izgleda.

Konstantni formati koji odgovaraju svakom tipu dati su u tabeli. 7.1.

Tabela 7.1.

Konstante u C++

Konstantno Format Primjeri
Cijeli Decimala: niz decimalnih cifara koji ne počinje nulom osim ako nije broj nula 8, 0, 199226
Oktalno: nula praćena oktalnim znamenkama (0,1,2,3,4,5,6,7) 01, 020, 07155
Heksadecimalni: Ox ili OX praćen heksadecimalnim znamenkama (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F) 0xA, 0x1 B8, 0X00FF
Real Decimala: [cifre], [cifre] 5.7, .001, 35.
Eksponencijalno: [cifre][.][cifre](E|e)[+|-[cifre] 0.2E6, .11e-3, 5E10
Symbolic Jedan ili dva znaka zatvorena u apostrofe "A", 'yu', "*", 'db' '\0' '\n', '\012' "\x07\x07"
String Niz znakova zatvorenih pod navodnicima "Vasia je bila ovdje", "\tVrijednost r=\0xF5\"

Ako je potrebno formirati negativan cijeli broj ili realnu konstantu, tada se predznak stavlja ispred konstante unarnu operaciju promjene u znaku (-), na primjer: -218, -022, -0x3S, -4.8, -0.1e4.

Realna konstanta u eksponencijalnom formatu je predstavljena kao mantisa i red. Mantisa se piše lijevo od znaka eksponenta (E ili e), a redoslijed se piše desno od znaka. Vrijednost konstante je definirana kao umnožak mantise i broja 10 podignutog na stepen naznačen u redoslijedu. Imajte na umu da razmaci unutar broja nisu dozvoljeni, a da biste odvojili cijeli broj od razlomaka, točkom. , a ne zarez, koristi se.

Programer može samostalno podesiti tip konstante. Može se i izostaviti cijeli dio, ili razlomak, ali ne oboje odjednom. Ako su navedena oba dijela, potreban je znak tačke.

Znakovne konstante koje se sastoje od jednog znaka zauzimaju jedan bajt u memoriji i imaju standardni tip char. Dvoznakovne konstante zauzimaju dva bajta i imaju int tip, s prvim znakom smještenim u bajtu s nižom adresom.

Obrnuta kosa crta se koristi za predstavljanje:

· kodovi koji nemaju grafička slika(Na primjer,
\A - zvučni signal, \n – pomeranje kursora na početak sledećeg reda);

· apostrof ("), obrnuta kosa crta (\), upitnik (?) i navodnici (");

· bilo koji znak koji koristi svoj heksadecimalni ili oktalni kod, na primjer, \073, \0xF5. Numerička vrijednost mora biti u rasponu od 0 do 255.

Pozivaju se nizovi znakova koji počinju sa obrnutom kosom crtom menadžeri, ili escape sekvence. U tabeli 7.2. njihov važeće vrijednosti. Escape sekvenca se tumači kao jedan znak. Ako nakon obrnute kose crte odmah slijedi znak koji nije predviđen u tabeli. 7.2, rezultat interpretacije je nedefinisan. Ako se u nizu pojavi nevažeća cifra, to se smatra krajem digitalnog koda.


Tabela 7.2.

Escape sekvence u C++

Escape sekvence se također mogu koristiti u konstantama niza, inače nazvanim string literals. Na primjer, ako trebate napisati znak navodnika unutar stringa, prethodi mu kosa crta, po čemu ga kompajler razlikuje od znaka navodnika koji ograničava niz:

"Izdavačka kuća\"Petar\""

Sve literale stringova kompajler tretira kao različite objekte.

String konstante odvojene samo u programu razmaka znakova, se kombinuju u jednu tokom kompilacije. Duga konstanta niza može se postaviti na više redova korištenjem obrnute kose crte nakon koje slijedi prijelaz reda kao crtica. Ove simbole kompajler ignoriše i sljedeći red percipira se kao nastavak prethodnog. Na primjer, linija

Do ove tačke, sve varijable koje smo razmatrali su bile ne konstante. Njihove vrijednosti mogu se promijeniti u bilo kojem trenutku. Na primjer:

int x(4); // inicijaliziranje varijable x vrijednošću 4 x = 5; // promijenimo vrijednost x u 5

Međutim, ponekad je korisno koristiti varijable čije se vrijednosti ne mogu promijeniti − konstante. Na primjer, gravitacija na Zemlji: 9,8 m/s^2. Malo je vjerovatno da će se to promijeniti u bliskoj budućnosti. Koristite konstantu za ovaj slučaj − najbolja opcija, jer ćemo na taj način spriječiti svaku (čak i slučajnu) promjenu vrijednosti.

Uraditi varijabilna konstanta– upotreba ključna riječ konst prije ili poslije tipa varijable. Na primjer:

const dvostruka gravitacija (9,8); // poželjno je koristiti const prije int tipa podataka const sidesInSquare ( 4 ); // ok, ali nije poželjno

Iako će C++ prihvatiti const prije ili poslije tipa, preporučujemo korištenje prije tip.

Konstante moraju biti inicijalizirane po najavi. Njihove vrijednosti se ne mogu promijeniti pomoću operacije dodjeljivanja.

const dvostruka gravitacija (9,8); gravitacija = 9,9; // nije dozvoljeno - greška kompilacije

Deklariranje konstante bez inicijalizacije također će uzrokovati grešku kompilacije:

const dvostruka gravitacija; // greška kompilacije, konstanta mora biti inicijalizirana

Imajte na umu da se konstante također mogu inicijalizirati korištenjem non-const vrijednosti:

std::cout<< "Enter your age: "; int age; std::cin >> starost; const int usersAge(starost); // varijabla usersAge se ne može promijeniti u budućnosti

const je najkorisniji (i najčešće korišten) s parametrima funkcije:

void printInteger(const int mojaValue) (std::cout<< myValue; }

void printInteger(const int myValue)

std::cout<< myValue ;

Dakle, kada pozivamo funkciju, konstantni parametar nam govori da funkcija neće promijeniti vrijednost varijable myValue. Drugo, osigurava da funkcija ne mijenja vrijednost myValue.

Vrijeme kompajliranja i vrijeme izvođenja

Kada ste u procesu kompajliranja programa, ovo je vrijeme kompajliranja(vrijeme kompajliranja) . Kompajler provjerava vaš program za sintaksičke greške, a zatim pretvara kod u objektne datoteke.

Kada ste u procesu pokretanja vašeg programa ili kada je program već pokrenut - ovo je runtime(vodeće vrijeme). Kod se izvršava red po red.

Constexpr

U C++ postoje dvije vrste konstanti.

Konstante runtime. Njihove vrijednosti se određuju samo u vrijeme izvođenja (kada je program pokrenut). Varijable kao što su usersAge i myValue (u kodu iznad) su konstante izvođenja jer kompajler ne može odrediti njihove vrijednosti u vrijeme kompajliranja. usersAge zavisi od korisničkog unosa (koji se može primiti samo tokom izvršavanja programa), a myValue zavisi od vrednosti prosleđene funkciji (koja će takođe postati poznata tokom izvršavanja programa).

Konstante compile-time. Njihove vrijednosti se određuju u vrijeme kompajliranja. Na primjer, gravitacija Zemlje je konstanta vremena kompajliranja, mi smo je sami odredili dok smo pisali program.

U većini slučajeva, nije važno o kojoj vrsti konstante se radi: u vremenu prevođenja ili izvođenju. Međutim, još uvijek postoji nekoliko situacija u kojima C++ može zahtijevati konstantu vremena kompajliranja umjesto konstante vremena izvođenja (na primjer, kada se određuje dužina niza fiksne veličine - to ćemo kasnije pogledati). Pošto postoje dva tipa, kompajler treba stalno da prati koji od njih pripada kojoj varijabli. Da bi olakšao ovaj zadatak, C++11 uvodi ključnu riječ constexpr, što osigurava da je tip konstante vrijeme kompajliranja:

constexpr dvostruka gravitacija (9,8); // ok, vrijednost se određuje u vrijeme kompajliranja constexpr int sum = 4 + 5; // ok, vrijednost 4 + 5 je određena u vrijeme kompajliranja std::cout<< "Enter your age: "; int age; std::cin >> starost; constexpr int myAge = starost; // nije u redu, varijabla starosti nije definirana u vrijeme kompajliranja

Najvjerovatnije ga nećete koristiti, ali vam neće škoditi da znate o tome.

Pravilo: Svaka varijabla koja ne bi trebala promijeniti svoju vrijednost nakon inicijalizacije mora biti deklarirana kao const (ili kao constexpr).

Konstantna imena

Neki programeri pišu imena konstanti velikim slovima. Drugi koriste uobičajena imena, samo sa prefiksom 'k'. Nećemo ih ni na koji način isticati, jer su konstante iste obične varijable, samo sa fiksnim vrijednostima, to je sve. Nema posebnog razloga da ih se ističe. Međutim, to je stvar svakog pojedinca.

Karakterne konstante

IN prethodna lekcija, raspravljali smo o "magijskim brojevima" - literalima koji se koriste u programu kao konstante. Pošto je njihova upotreba loša praksa, šta biste onda trebali koristiti umjesto toga? Odgovor: simboličke konstante. Symbolic(ili više simbolički) konstantan– ovo je isti literal (magični broj), samo sa identifikatorom. Postoje dva načina da se deklarišu simboličke konstante u C++. Jedan od njih je dobar, a jedan nije tako dobar. Pogledajmo oboje.

Loša praksa: korištenje makro objekata sa zamjenskim tekstom kao karakterne konstante

Ova metoda je bila široko korištena, tako da je još uvijek možete vidjeti u starim kodovima.

IN Lekcija 22 o predprocesorima i direktivama, rekli smo da makro objekti imaju dva oblika - sa i bez zamjenskog teksta. Pogledajmo prvi slučaj (sa zamjenskim tekstom). izgleda ovako:

#define identifikator substitution_text

Jednom kada pretprocesor naiđe na ovu direktivu, sva daljnja pojavljivanja 'identifikatora' bit će zamijenjena sa 'substitution_text'. Identifikator se obično piše velikim slovima s donjom crtom umjesto razmaka.

Na primjer:

int max_students = numClassrooms * MAX_STUDENTS_PER_CLASS;

#define MAX_STUDENTS_PER_CLASS 30

U vrijeme kompajliranja, predprocesor će zamijeniti sve MAX_STUDENTS_PER_CLASS identifikatore sa literalom 30.

Slažem se, ovo je mnogo bolja opcija od korištenja magičnih brojeva, iz barem nekoliko razloga. MAX_STUDENTS_PER_CLASS pruža kontekst o tome šta je ova vrijednost i zašto je potrebna, čak i bez komentara. Drugo, ako broj treba da se promeni, biće dovoljno da se promene samo u direktivi #define, svi ostali identifikatori MAX_STUDENTS_PER_CLASS u programu će biti automatski zamenjeni novom vrednošću prilikom ponovnog kompajliranja.

Pogledajmo još jedan primjer:

#define MAX_STUDENTS_PER_CLASS 30 #define MAX_NAME_LENGTH 30 int max_students = numClassrooms * MAX_STUDENTS_PER_CLASS; setMax(MAX_NAME_LENGTH);

#define MAX_STUDENTS_PER_CLASS 30

#define MAX_NAME_LENGTH 30

int max_students = numClassrooms * MAX_STUDENTS_PER_CLASS;

setMax(MAX_NAME_LENGTH);

Ovdje je jasno da MAX_STUDENTS_PER_CLASS i MAX_NAME_LENGTH trebaju biti različiti objekti, iako imaju iste vrijednosti (30).

Pa zašto je ova metoda loša? Dva su razloga.

Prvo, makroe obrađuje pretprocesor, koji zamjenjuje identifikatore određenim vrijednostima. Ove vrijednosti se neće pojaviti u programu za otklanjanje grešaka (koji prikazuje vaš stvarni kod). Kada se kompajlira, int max_students = numClassrooms * 30; u debuggeru ćete vidjeti int max_students = numClassrooms * MAX_STUDENTS_PER_CLASS; . Šta ako trebate saznati vrijednost MAX_STUDENTS_PER_CLASS? Morat ćete ga sami pronaći u kodu. A to može potrajati, ovisno o veličini programa.

Drugo, ove direktive uvijek imaju globalni opseg (o tome ćemo kasnije). To znači da #define vrijednosti u jednom dijelu koda mogu biti u sukobu sa #define vrijednostima u drugom dijelu koda.

Pravilo: Nemojte koristiti #define za kreiranje karakternih konstanti.

Dobar način: const varijable

Najbolji način za kreiranje karakterne konstante je korištenje const:

const int maxStudentsPerClass (30); const int maxNameLength (30);

const int maxStudentsPerClass (30) ;

const int maxNameLength (30) ;

Takve vrijednosti će biti prikazane u debugger-u, a također slijede sva pravila regularnih varijabli (uključujući opseg).

Pravilo: Koristitekonstza stvaranje simboličkih konstanti.

Korištenje karakternih konstanti u programu

U mnogim programima, karakterna konstanta se mora koristiti u cijelom kodu (ne samo na jednom mjestu). To mogu biti fizičke ili matematičke konstante koje se ne mijenjaju (na primjer, Pi ili Avogadrov broj) ili specifične vrijednosti vašeg programa. Kako ih ne biste pisali svaki put kada su potrebni, definišite ih na jednom mjestu i koristite gdje god je potrebno. Na ovaj način, ako morate da ih promenite, biće dovoljno da uđete u jednu datoteku i tamo unesete izmene, umesto da pretražujete ceo program.

Kako to učiniti? Veoma jednostavno:

  1. Kreirajte datoteku zaglavlja za pohranjivanje konstanti.
  2. U datoteci zaglavlja, deklarirajte prostor imena (

Laboratorijski rad br.1

Uvod u programski jezik C++

Cilj rada:

1. Proučavanje interfejsa ljuske Visual C++;

2. Prevođenje i kreiranje izvršnih datoteka.

3. Proučavanje osnovnih tipova podataka jezika C++;

Osnovni tipovi podataka;

Varijable i konstante;

4. Studija operatera:

Aritmetika;

Logical;

Poređenja;

Bitwise;

Ulaz i izlaz.

5. Sticanje vještina za rad u softveru Microsoft Visual C++ 5.0.

Korištena oprema:

Personalno računalo kompatibilno sa IBM PC-om.

Korišteni softver:

Windows operativni sistem;

Integrisano programsko okruženje Microsoft Visual C++ 5.0 (ISP Microsoft Visual C++ 5.0).

Radni zadatak

1.1. Preuzmite ISP Microsoft Visual C++ 5.0.

1.2. Naučite Microsoft Visual C++ 5.0 ISP komande.

1.3. Naučite glavne tipove podataka Microsoft Visual C++ 5.0 COI.

1.4. Kompletan primjer 1, primjer 2, primjer 3 i zadatak nastavnika.

1.5. Snimite protokol za rad sa integrisanim okruženjem.

Radni nalog

2.1. Pokrenite Microsoft Visual C++ 5.0.

2.2. Kreirajte *.cpp datoteku u radnom direktoriju.

2.3. Kompletan primjer 1, primjer 2, primjer 3 i zadatak nastavnika.

2.4. Napravite dijagram algoritma i napišite program (po uputstvu nastavnika). Snimite protokol za rad sa integrisanim okruženjem.

2.5. Završite Microsoft Visual C++ 5.0 i pokrenite program.

3.1. Naziv laboratorijskog rada.

3.2. Cilj rada.

3.3. Teorijski dio.

3.4. Algoritmi izvršavanih programa.

3.5. Tekst izvedenih programa.

3.6. Zaključak.

Kratak opis posla

4.1. Pokrenite i radite u ISP-u Microsoft Visual C++ 5.0.

Da biste pokrenuli Microsoft Visual C++ 5.0 ISP, morate pokrenuti Start meni - Microsoft Visual C++ 5.0 - Microsoft Visual C++ 5.0.

Da biste počeli raditi u C++-u, prvo morate kreirati jednostavnu konzolnu aplikaciju, da biste to učinili potrebno je izvršiti sljedeće korake:

Ø Pokrenite Visual C++ (Start®Programs® Microsoft Visual C++ 5.0.® Microsoft Visual C++ 5.0 . );

Ø Izaberite "Novo" iz menija "Datoteka". Uvjerite se da je kartica “Projekti” odabrana u dijaloškom panelu “Novo”. Na listi tipova projekata izaberite "Win32 Console Application";

Ø Odaberite direktorij projekta ‘Lokacija’ (C:\students\’group*) i naziv projekta ‘Naziv projekta’, na primjer, “Prvi” i kliknite “OK”. Imaćete kreirane "Prve klase";

Ø Nakon toga, ponovo odaberite "Novo", ali sa karticom "Files" i odaberite "C++ Source File". Na listi ‘File name’ postavite ime, na primjer, “First” Zatim kliknite na “OK” i datoteka “First.cpp” će biti kreirana.

Opća struktura programa.

Naš zadatak je da razmotrimo opštu strukturu programa napisanog na C/C++, odnosno da se sav izvorni tekst nalazi u jednoj datoteci:

Ø Područje direktive predprocesora (uključi, definiraj..);

Ø Opis prilagođenih tipova podataka;

Ø Nepotpune deklaracije funkcija;

Ø Opis globalnih varijabli;

Ø Deklaracija funkcije 1;

Ø Deklaracija funkcije 2;

Ø Deklaracija funkcije main().

Ova shema nema tako strogi poredak kao u Pascalu, međutim, smatra se tradicionalnom.

Program se sastoji od jedne ili više procedura koje se tradicionalno nazivaju funkcijama. Jedna funkcija koja je potrebna u bilo kojem programu trebala bi se zvati main. Služi kao ulazna tačka u program i naknadno poziva druge funkcije.

Minimalni program izgleda ovako:

Void main(void)

Sastoji se od glavne funkcije koja ne prihvata niti vraća parametre (void). Tijelo funkcije, zatvoreno u vitičaste zagrade, također ne sadrži nikakve korisne izjave.

Varijable se mogu deklarirati i unutar tijela funkcije i izvan tijela. U prvom slučaju im se može pristupiti samo iz tijela date funkcije (lokalne deklaracije), au drugom - iz bilo koje funkcije (globalne deklaracije).

Izvršenje programa počinje tijelom glavne funkcije, koja može prihvatiti skup vrijednosti iz komandne linije. Tijelo main sadrži pozive drugim funkcijama, kako iz standardnih biblioteka tako i onih koje je korisnik definirao u tekstu programa.

Izvršenje programa završava se prema zadanim postavkama kada se glavni napusti, ali može biti prekinuto u bilo kojem trenutku ako dođe do kritične greške ili u određenom slučaju. Da bi to učinili, obično koriste funkciju exit() iz stdlib biblioteke.

Štampanje niza na ekran

Prije svega, napišimo program koji ispisuje string na ekran.

Program mora sadržavati funkciju koja se zove main(). Ona je zaslužna za ulogu pokretača programa. Ovu funkciju nije unaprijed definirao kompajler, ne može se preopteretiti, a njen tip ovisi o implementaciji. Glavna funkcija se može definirati ovako:

Primjer 1:

// Prvi program u C++

#include

Void main()

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

Da biste izvršili program, prvo ga morate sačuvati. Idite na meni File i tamo kliknite na Save All. Zatim morate da ga izgradite (kompajlirate) da biste to uradili potrebno je da izvršite sledeće korake:

Ø Idemo na meni ( Build®Build *.exe) ili prečica na tastaturi (F7), program će početi da se gradi. Ako kompajler ne generiše poruku o grešci, koja se može videti u prozoru koji se pojavljuje ispod, onda možete bezbedno da pokrenete program;

Ø Sada sve što treba da uradite je da izvršite program, da biste to uradili idite na meni ( Build®Execute *.exe.) ili prečica na tastaturi (Ctrl+F5);

Ø Vaš program radi.

Linija #include govori kompajleru da omogući standardne mogućnosti ulaznog i izlaznog toka koje se nalaze u datoteci iostream.h. Bez ovih opisa izraz cout << "Ovo je moj prvi program" ne bi imalo smisla. Glavne standardne biblioteke su navedene u tabeli 1.

Tabela 1.

Osnovne C/C++ standardne biblioteke

Operacija<< ("поместить в") пишет свой первый аргумент во второй (в данном случае, строку "Ovo je moj prvi program" prema standardnom izlazu cout). Niz je niz znakova zatvoren u dvostruke navodnike. U nizu, obrnuta kosa crta \ iza koje slijedi drugi karakter označava jedan poseban karakter; u ovom slučaju, \n je znak novog reda. Dakle, izlazni znakovi se sastoje od " Ovo je moj prvi program" i prijelaz na red, koji definiraju funkciju pod nazivom main. Svaki program mora sadržavati funkciju pod nazivom main, a program počinje izvršavanjem ove funkcije.

Unos sa tastature

Sljedeći (prilično opširni) program traži od vas da unesete broj inča. Kada to učinite, ispisat će se odgovarajući broj centimetara.

Primjer 2:

#include

Void main()

int inč = 0; // inč - inč

cout<< "inches";

cin >> inch;

cout<< inch;

cout<< " in = ";

cout<< inch*2.54;

cout<< " cm\n";

Prvi red funkcije main() opisuje cijelu varijablu inch. Njegova vrijednost se očitava pomoću operacije >> ("preuzmi iz") na standardnom ulazu cin.

U ovom primjeru, postoji jedan izraz za svaku izlaznu naredbu; predugo je. Operacija povlačenja<< можно применять к ее собственному результату, так что последние четыре команды вывода можно было записать одним оператором:

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

Komentari

Često je korisno umetnuti tekst u program koji je namijenjen samo kao komentar za osobu koja čita program i koju kompajler u programu ignorira. U C++ to se može uraditi na jedan od dva načina.

Znakovi /* počinju komentar koji se završava znakovima */. Cijeli ovaj niz znakova je ekvivalentan znaku za razmak (na primjer, znaku za razmak). Ovo je najkorisnije za komentare u više redaka i uklanjanje dijelova programa prilikom uređivanja, ali imajte na umu da /* */ komentari ne mogu biti ugniježđeni.

// znakovi započinju komentar koji se završava na kraju reda na kojem se pojavljuju. Opet, čitav niz znakova je ekvivalentan praznini. Ova metoda je najkorisnija za kratke komentare. // znakovi se mogu koristiti za komentiranje /* ili */ znakova, a /* znakovi se mogu koristiti za komentiranje //.

4.6. Tipovi podataka u C++

Prije nego što napišete program, morate postaviti tipove podataka. Postoji nekoliko tipova podataka koji se najčešće koriste u C++ (ne svi):

Ø Brojčani predpisani cijeli brojevi (int, short, char);

Ø Brojčani razlomci sa predznakom (plutajući, dupli, dugi (u C), dugi dupli (u C);

Ø Neoznačeni broj - sve gore navedene vrste sa dodatkom Unsigned;

Ø Char može se koristiti i kao tip karaktera .

Standardne vrste i veličine odgovarajućih ćelija su date u nastavku.

Domet veličina (Bt)
char -128..127;
unsigned char 0..255;
int -32 768.. 32 767;
unsigned int 0..65535;
dugo -2 147 483 648..2 147 483 647;
unsigned long 0..4 294 967 295;
float 3.4e-38..3.4e+38;
dupli 1.7e-308..1.7e+308;
dugi dupli 3.4e-4932..3.4e+4932.

Varijabla u C/C++ je deklarirana ovako:

Int iMyVariable;

U gornjoj izjavi, iMyVariable je deklarirana kao cjelobrojna varijabla. A evo i deklaracije varijable tipa char :

Char cMyChar;

Tipovi podataka kao što su int , float , char I dugo , su sastavni dio C/C++ i ne morate pisati nikakav kod da biste kompajleru rekli šta te riječi znače. C/C++ vam takođe omogućava da deklarirate sopstvene, posebne tipove podataka.

Primjer 3 predstavlja program koji će ispisati veličinu tipova podataka u bajtovima. Primjer 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;

Da biste saznali veličinu ćelije odgovarajućeg tipa, samo upišite u program sizeof(tip). Činjenica je da se za različite operativne sisteme veličine ćelije istog tipa mogu razlikovati (na primjer, tip int u 16-bitnim i 32-bitnim OS je 1 bajt i 2 bajta, respektivno).

Operater sizeof izračunava veličinu svog operanda u bajtovima. Operand mora biti ili izraz koji se ne evaluira ili ime tipa u zagradama. Operateru sizeof ne može se primijeniti na funkciju, bit polje, nedefiniranu klasu, void tip ili niz s nespecificiranim granicama indeksa. Bajt nije definiran ni na koji način jezikom osim rezultatom operacije sizeof, upravo sizeof(char) je 1.

4.7. Varijable

Varijabla je naziv memorijske lokacije koja se mora koristiti za pohranjivanje vrijednosti koja se mijenja, da bi memorija bila dostupna programu za korištenje, mora joj biti dodijeljena. Postoje statička i dinamička alokacija memorije. Statička alokacija memorije se događa u vrijeme kompajliranja i veličina bloka se ne može promijeniti tokom izvršavanja programa. Dinamička memorija se dodjeljuje u vrijeme izvođenja, a njena veličina može ovisiti o trenutnom stanju programa. Memorijsko područje dodijeljeno programu koristi se za pohranjivanje podataka.

Ako se podaci mogu promijeniti tokom rada, onda govore o korištenju varijabli, ako ne mogu, onda koriste konstante. Da biste pristupili varijabli ili konstanti, morate koristiti ime ili adresu.

Varijabla je imenovano područje memorije čija se vrijednost može promijeniti tokom izvršavanja programa.

Sve varijable moraju biti deklarirane za njihovu upotrebu kako bi kompajler dodijelio statičku memoriju, tako da mora znati njenu tačnu veličinu. Da biste deklarirali varijablu, morate navesti: naziv, adresa, veličina(definirano po tipu), značenje.

Ako se deklaracija nalazi unutar para vitičastih zagrada (na primjer, unutar tijela funkcije), tada se deklarirane varijable smatraju lokalnim i memorija se dodjeljuje u području programskog stoga, a početna vrijednost je nedefinirana.

Ako je varijabla deklarirana izvan tijela funkcije, onda se smatra globalnom i stavlja se u segment podataka i njena početna vrijednost je nula. Deklarisanje varijable i dodeljivanje početne vrednosti se poziva inicijalizacija.

Ako funkcija ima argument, morate deklarirati varijable koje će uzeti njihove vrijednosti, te se varijable pozivaju formalni parametri.

U C++ postoje dva klasifikatora koji kontrolišu pristup i modifikacije: konst I volatile.

Konstanta je imenovana oblast memorije čija se vrijednost ne može promijeniti tokom izvršavanja programa. Konstanti se uvijek dodjeljuju vrijednosti kada su deklarirane i ne mogu se kasnije mijenjati. Tip varijabli konst ne mogu se mijenjati, ali se mogu inicijalizirati.

Kvalifikator volatile govori kompajleru da se vrijednost varijable može implicitno promijeniti. Na primjer, adresa globalne varijable se prosljeđuje tajmeru operativnog sistema i koristi se za brojanje u stvarnom vremenu. U ovom slučaju, sadržaj varijable se mijenja bez eksplicitnog izvršavanja bilo kakve izjave o dodjeli.

Jezik C/C++ pruža konstante kontrolnih znakova, koji su prikazani u tabeli 2.

Tabela 2.

Konstante kontrolnih znakova

Najpoznatiji uslužni znakovi: pomak u red (kod 13), povratak na nosač (kod 10), tabulator (šifra 9). Da biste ih specificirali u programu u obliku karakternih konstanti, koristi se kombinacija dva vidljiva znaka, odnosno “\n”, “\r”, “\t”. Da biste predstavili znak kose crte, koristite konstrukciju “\\”

Postoje četiri specifikacije memorije u C: extern, static, register, auto.

Ovi specifikatori govore kompajleru kako da pohrani deklariranu varijablu. Opšti oblik deklaracije koja koristi ove specifikacije je:


Povezane informacije.


Realne konstante

Cjelobrojne konstante

Konstante u programima

Konstante su objekti koji se ne mogu koristiti na lijevoj strani operatora dodjeljivanja, jer konstanta je vrijednost koja se ne može adresirati i, iako je pohranjena u memoriji računara, obično ne postoji način da se sazna njena adresa. U jeziku C, konstante su:

Samodefinirani aritmetički, znakovni i string podaci;

Identifikatori niza i funkcija;

Elementi nabrajanja.

Aritmetičke konstante mogu biti cjelobrojnog ili realnog tipa.

Opšti format: ± n(+ obično nije uključen).

Decimalne konstante- niz brojeva 0...9, od kojih prvi ne bi trebao biti 0. Na primjer, 22 i 273 su obične cjelobrojne konstante ako treba da unesete dugu cjelobrojnu konstantu, tada je naznačen atribut L(l) - 273L (273l). Za takvu konstantu će se dodijeliti 4 bajta. Redovna cjelobrojna konstanta koja je predugačka za tip int, tretira se kao duži tip ( dugo ili dugo dugo).

Postoji sistem notacije za oktalne i heksadecimalne konstante.

Oktalne konstante- niz brojeva od 0 do 7, od kojih prvi mora biti 0, na primjer: 020 = 16 decimala.

Heksadecimalne konstante- niz brojeva od 0 do 9 i slova od A do F (a...f), počevši od simbola 0H (0h), na primjer: 0X1F (0h1f) = 31 decimala.

Oktalne i heksadecimalne konstante također se mogu završavati slovom L(l) - dugo, na primjer, 020L ili 0X20L.

Primjeri cjelobrojnih konstanti:

1992 13 1000L - decimalni;

0777 00033 01l - oktalno;

0x123 0X00ff 0xb8000l - heksadecimalno.

Ove konstante se pohranjuju u memoriju u dvostrukom formatu, au vanjskom predstavljanju mogu imati dva oblika:

1) sa fiksnim decimalnim zarezom, format snimanja: ± n.m, Gdje n, m- cjelobrojni i razlomci broja;

2) plutajući decimalni zarez (eksponencijalni oblik): ± n.mstr, Gdje n, m- cjelobrojni i razlomci broja, R- poredak, na primjer, 1,25×10 -8 se piše kao 1,25E-8.

Primjeri konstanti s fiksnim i pomičnim zarezom:

1.0 -3.125100e-10 0.12537e+13

Znakovna konstanta je znak zatvoren u jednostruke navodnike: "A", "x" (zauzima 1 bajt).

C jezik koristi i. poseban (upravljanje ) znakovi koji se ne prikazuju na ekranu; njihova svrha je da utiču na redosled kojim se drugi karakteri prikazuju S obzirom da se ne prikazuju na ekranu, koristi se par znakova da ih označi u tekstu programa, od kojih je prvi uvek obrnuta kosa crta (. obrnuta kosa crta) ("\"). Glavni su:

Obrnuta kosa crta u konstantama znakova i niza (vidi dolje) također predstavlja neke obične znakove čije bi upisivanje tamo dovelo do dvosmislenosti:

Prilikom dodjeljivanja varijabli znakova, ove sekvence moraju biti zatvorene u apostrofe. Znakovna konstanta "\0" (ne brkati je sa simbolom - broj"0" !) se često piše umjesto cjelobrojne konstante 0 kako bi se naglasila simbolička priroda nekog izraza (pogledajte temu "Strings").

Primjeri znakovnih konstanti: "A", "9", "$", "\n", "\"".

Konstanta je ograničeni niz znakova iz abecede jezika, koji je slika fiksnog (nepromjenjivog) objekta.

Konstante mogu biti numeričke, znakovne i nizove. Numeričke konstante se dijele na cjelobrojne i realne.

Cjelobrojne konstante

Cjelobrojni podaci u jeziku C mogu se predstaviti u jednom od sljedećih brojevnih sistema:


Sistem predstavljanja binarnih podataka nije direktno podržan u jeziku C. Međutim, možete koristiti datoteku binary.h, koja definira binarne konstante unutar bajta.

Primjer korištenja binarnog brojevnog sistema u jeziku 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();
return 0;
}

Rezultat izvršenja

U zavisnosti od vrednosti celobrojne konstante, kompajler joj dodeljuje jedan ili drugi tip (char, int, long int).

Možete koristiti sufiks U (ili u) da predstavite cjelobrojnu konstantu kao cijeli broj bez predznaka.

Na primjer, konstanti 200U dodjeljuje se 1 bajt, a najznačajniji bit se koristi za predstavljanje jednog od bitova brojčanog koda i raspon vrijednosti postaje od 0 do 255. Sufiks L (ili l) dozvoljava da se cijelobrojnoj konstanti dodijeli 8 bajtova (long int).

Korišćenje sufiksa U (ili u) i L (ili l) zajedno u bilo kom redosledu omogućava da celobrojna konstanta bude neoznačeni dugi int i da zauzme 64 bita memorije, pri čemu se predznačni bit koristi za predstavljanje bita koda (a ne znak).

Realne konstante

Konstanta s pomičnim zarezom (realna konstanta) je uvijek predstavljena kao broj s pomičnim zarezom dvostruke preciznosti, tj. ima tip double, i sastoji se od sljedećih dijelova:

  • cijeli dio je niz brojeva;
  • tačke - separator cijelih i razlomaka;
  • razlomak - niz brojeva;
  • simbol eksponenta e ili E;
  • eksponent kao cjelobrojna konstanta (može biti potpisana).

Bilo koji (ali ne oba) od sljedećih parova može biti izostavljen:

  • cijeli ili razlomljeni dio;
  • tačka ili simbol e (E) i eksponent kao cjelobrojna konstanta.

Primjeri realnih konstanti

  • 3.14159
  • 2.1E5
  • .123EZ
  • 4037e-5

Po defaultu, kompajler dodeljuje tip double realnom broju. Ako programer nije zadovoljan tipom koji kompajler dodeljuje konstanti, tada se tip može eksplicitno navesti u unosu konstante koristeći sledeće sufikse:

  • F (ili f ) - float za jednostavne realne konstante,
  • L (ili l ) je duga dvostruka za realne konstante dvostruke proširene preciznosti.

primjeri:

  • 3.14159F - konstanta tipa float, koja zauzima 4 bajta;
  • 3.14L je duga dvostruka konstanta koja zauzima 10 bajtova.

Karakterne konstante

Znakovna konstanta je jedan znak, na primjer: 'z'. Kontrolni kodovi koji nemaju grafički prikaz mogu se koristiti i kao simboličke konstante. U ovom slučaju, kod kontrolnog znaka počinje znakom '\' (obrnuta kosa crta).

Tipično, pritiskom na tipku Enter generiše dva kontrolna znaka odjednom - pomak u red (0x0A) i povratak na nosilac (0x0D).

Sve znakovne konstante su tipa char i zauzimaju 1 bajt u memoriji. Vrijednost simboličke konstante je numerička vrijednost njenog internog koda.

String konstante

Konstanta stringa je niz znakova zatvorenih u navodnike, na primjer:

"Ovo je konstanta niza"

Navodnici nisu uključeni u niz, već ga samo razgraničavaju. Tehnički, string konstanta je niz znakova, i na osnovu toga se može klasifikovati kao složeni objekt C jezika.

Kompajler postavlja '\0' (null karakter) na kraj svake konstante niza tako da program može odrediti kraj stringa. Ovaj prikaz znači da veličina string konstante nije ograničena nikakvim ograničenjem, ali da bi se odredila dužina string konstante mora se skenirati u potpunosti.

Pošto se string konstanta sastoji od znakova, ona je tipa char. Broj memorijskih ćelija potrebnih za pohranjivanje string konstante je za 1 veći od broja znakova u njoj (1 bajt se koristi za pohranjivanje nul karaktera).

Znakovna konstanta 'x' i niz od jednog znaka 'x' nisu ista stvar. Znakovna konstanta je znak koji se koristi za numerički prikaz slova x, dok konstanta niza 'x' sadrži znak 'x' i nulti karakter '\0' i zauzima 2 bajta memorije. Ako se niz konstante u programu pišu jedna za drugom kroz graničnike, onda kada se program izvrši, one će biti smještene u uzastopne memorijske ćelije.

Najbolji članci na ovu temu