Muutujad C ++
C ++ muutuja annab meile nimelise salvestusvõime. See võimaldab programmeerijal andmetega vastavalt vajadusele manipuleerida. Igal muutujal on tüüp C ++. Muutuja tüüp aitab määrata muutuja mälukaardi suurust ja paigutust, selles mälus salvestatavate väärtuste vahemikku ja sellele rakendatavate toimingute kogumit.
Selles C ++ õpetuses saate teada:
- Muutujad C ++
- Muutujate põhitüübid C ++ keeles
- Muutujate deklareerimise reeglid C ++ keeles
- C ++ muutuja andmetüübid
- Muutuja nimi või identifikaatorid
- Const kvalifikatsioon C ++ keeles
- Muutujate ulatus C ++ keeles
- Muutuja tüübi teisendamine
- Registreerige muutujad
- Põgenemisjärjestused
Muutujate põhitüübid C ++ keeles
Siin on C ++ muutujate põhitüübid:
Int:
Täisarv on numbriline literaal (seotud numbritega) ilma murd- või eksponentsiaalse osata. Näide. 120, -90 jne.
Topelt:
See on kahekordse täpsusega ujukoma väärtus. Näide: 11.22, 2.345
Char:
Tähemärki literaal luuakse, sisestades jutumärkidesse ühe märgi. Näiteks: 'a', 'm', 'F', 'P', '}' jne.
Ujuk:
Ujukoma literaal on numbriline literaal, millel on kas murd- või astendvorm. Näiteks: 1.3, 2.6
Keelpillid:
String literaal on topelt jutumärkidesse lisatud märkide jada. Näiteks: "Kuidas läheb?"
Bool:
See peab tõeväärtuseks tõene või väär.
Muutujate deklareerimise reeglid C ++ keeles
Muutuja nimetamiseks on mõned levinumad reeglid:
- Muutuja C ++ nimes võivad olla ainult tähestikud, numbrid ja alakriips.
- Muutuja C ++ nimi ei saa alata numbriga.
- Muutujate nimed ei tohiks alata suurtähega.
- C ++ keeles kasutatav muutuja nimi ei saa olla märksõna. Näiteks int on märksõna, mida kasutatakse täisarvude tähistamiseks.
- C ++ muutuja nimi võib alamjoonega alata. Kuid seda ei peeta heaks tavaks.
C ++ muutuja andmetüübid
C ++ määratleb terve hulga primitiivseid tüüpe
Void tüüpi pole seotud väärtuste hulka ja seda võib kasutada vaid mõned asjaolud. See on kõige sagedamini funktsioonide tagastustüüp, mis väärtust ei tagasta.
Aritmeetiline liiki kuuluvad märki, täisarvud, Tõeväärtused ja ujukoma numbrid. Aritmeetiline tüüp, kui see on jagatud 2 kategooriasse
- Ujuvate punktide tüübid . Ujuk (või ujuv tüüp) tähistab kümnendarvusid. IEEE standard määrab minimaalse arvu olulisi numbreid. Enamik kompilaatoreid pakub täpsemat täpsust kui määratud miinimum. Tavaliselt on ujukid 32-bitised, kahekordsed 64-bitised ja pikad duublid kas 96- või 128-bitised.
- Integraalsed tüübid (mis sisaldavad tähemärke, täisarvusid ja Boole'i tüüpe). Boole'i tüüpi on ainult kaks liiki väärtusi: Õige või vale. On mitmeid söetüüpe , millest enamik on rahvusvahelistumise toetamiseks. Kõige elementaarsem tähemärk on char. Sütel on sama suur kui üksik masinbait, mis tähendab ühte baiti.
Integral liiki võib allkirjastada või allkirjastamata.
Allkirjastatud tüüp : nad tähistavad negatiivseid või positiivseid arve (sealhulgas nulli). Allkirjaga tüübis tuleb vahemik jagada ühtlaselt + ve ja -ve väärtuste vahel. Seega hoiab 8-bitine signeeritud märk väärtusi vahemikus -127 kuni 127.
Allkirjata tüüp : allkirjata tüübis on kõik väärtused> = 0. 8-bitine allkirjastamata märk võib sisaldada 0 kuni 255 (mõlemad kaasa arvatud).
Muutuja nimi või identifikaatorid
Identifikaatorid võivad koosneda mõnest tähest, numbrist ja alakriipsust või nende kombinatsioonist. Nime pikkusele pole kehtestatud piiranguid.
Identifikaatorid peavad
- algavad kas tähe või alakriipsuga ('_').
- Ja on tõstutundlikud; suured ja väikesed tähed on erinevad:
// määratleb neli erinevat int-muutujat
int guru99, gurU99, GuRu99, GURU99;
C ++ keel on selle kasutamiseks reserveerinud mõned nimed.
Muutujate nimetamiseks erinevates programmeerimiskeeltes on palju aktsepteeritud tavasid. Nende tavade järgimine võib parandada programmi loetavust.
- Identifikaator peaks vähemalt mingil määral näitama selle tähendust.
- Muutujate nimed on tavaliselt väiketähed-guru99, mitte Guru99 või GURU99.
- Meie määratletud klassid algavad tavaliselt suurtähega.
- Mitut sõna sisaldavad identifikaatorid peaksid iga sõna visuaalselt eristama. Näiteks guru99_website, mitte guru99website.
C ++ muutuja deklaratsioon ja määratlus
Muutuja deklareerimine teeb programmist nime teada ulatuses, milles see on määratletud. Näide:
int a=5;int b;char c='A';
int a,b;a=b=1000;
List initializationint a(5);int b{5};
Const kvalifikatsioon C ++ keeles
Oletame, et on muutuv puhver, mis näitab kasutajalt sisendite arvu. Siin ei soovi me kogu programmi ulatuses muuta buffsize väärtust. Tahame määratleda muutuja, mille väärtus, mida me teame, ei tohiks muutuda.
Sellisel juhul kasutage märksõna const
const int bufSize = 512; // input buffer size
See määratleb bufSize'i konstandina. Iga katse bufSize'ile omistada või seda muuta annab vea.
Siin ei saa me pärast objekti loomist const objekti väärtust muuta, see peab olema kohustuslik deklareerida ja initsialiseerida. Muidu loob kompilaator vea.
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
Muutujate ulatus C ++ keeles
Reguleerimisala on programmi ulatus, kus muutujal on tähendus. Enamasti saab sama nime kasutada erinevatele üksustele erinevates üksustes. Muutujad on nähtavad alates nende deklareerimisest kuni selle deklaratsiooni esinemisala lõpuni.
#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 < See programm määratleb 3 nime, nimelt peamine, summa ja val. See kasutab nimeruumi nime std koos kahe teise nimega sellest nimeruumist-cout ja endl.
- Funktsiooni nimi "main" on määratletud väljaspool lokkisulgusid. Funktsiooni nimi main-nagu enamik teisi väljaspool funktsiooni määratletud nimesid on globaalse ulatusega. Mis tähendab, et kui need on deklareeritud, on kogu programmis juurdepääsetavad nimed, mis on ülemaailmses ulatuses .
- Muutuv summa määratletakse selle ploki ulatuses, mis on põhifunktsiooni keha. Sellele pääseb juurde selle deklaratsioonikohast ja kogu põhifunktsiooni kogu kehast. Kuid mitte väljaspool seda. See tähendab, et muutuv summa on ploki ulatusega .
- Muutuja val on määratletud "for lause" ulatuses. Seda saab selles avalduses hõlpsasti kasutada, kuid mitte mujal põhifunktsioonis. Sellel on kohalik ulatus .
Pesastatud ulatus
Reguleerimisala võib sisaldada muid ulatusi. Sisaldatavat (või sisestatud) ulatust nimetatakse sisemiseks ulatuseks. Sisaldav ulatus on välimine ulatus.
#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äljund nr 1 kuvatakse enne korduskasutamise kohalikku määratlust. Seega see väljund
lause on see, mis kasutab taaskasutatud nime, mis on määratletud globaalses ulatuses. See avaldus väljastab
42 0
Väljund nr 2 toimub pärast taaskasutuse kohalikku määratlust. Nüüd on see reguleerimisala. Seetõttu kasutab see teine väljundlause lihtsalt kohalikku objekti, mille nimi on taaskasutatud, mitte globaalset ja väljundeid
0 0
Väljund nr 3 alistab vaikimisi ulatusreeglid, kasutades ulatusoperaatorit. Globaalsel ulatusel pole nime. Seega, kui ulatuseoperaatoril (: :) on vasak vasak pool tühi. See tõlgendab seda kui nime toomise taotlust globaalse ulatuse paremas servas. Seega kasutab väljend globaalseid taaskasutatud ja väljundeid
42 0
Muutuja tüübi teisendamine
Ühte tüüpi muutuja saab teisendada teiseks. Seda tuntakse kui "tüüpi teisendamist". Vaatame reegleid erinevate C ++ muutujate teisendamiseks:
Mitte-booli määramine bool-muutujale annab vale, kui väärtus on 0 ja tõene muul juhul.
bool b = 42; // b is trueBooli määramine mõnele muule aritmeetilisele tüübile annab 1, kui bool on tõene, ja 0, kui bool on vale.
bool b = true;int i = b; // i has value 1Ujuva punkti väärtuse määramine int-tüüpi muutujale annab kärbitud väärtuse. Salvestatud väärtus on osa pärast koma.
int i = 3.14; // i has value 3Int-väärtuse määramine ujuki tüüpi muutujale põhjustab murdosa muutumise nulliks. Täpsus kaob tavaliselt siis, kui täisarvul on rohkem bitte, kui ujuv muutuja mahutab.
Int i=3;double pi = i; // pi has value 3.0Kui proovime määrata allkirjastamata muutujale vahemikust väljas oleva väärtuse, on tulemuseks ülejäänud väärtus% (modulo)
Näiteks võib 8-bitine allkirjastamata char-tüüp sisaldada väärtusi vahemikus 0 kuni 255 (kaasa arvatud). Väärtuse omistamise väljaspool seda vahemikku määrab kompilaator selle väärtuse ülejäänud osa mooduli 256. Seetõttu annab ülaltoodud loogika kohaselt -1 määramine 8-bitisele allkirjastamata tähele sellele objektile väärtuse 255.
unsigned char c = -1; // assuming 8-bit chars, c has value 255Kui proovime allkirjastatud tüüpi objektile määrata vahemikust väljas oleva väärtuse, on tulemus ettearvamatu. See pole määratletud. Paistab, et programm töötab väljastpoolt, võib kokku kukkuda või tekitada prügiväärtusi.
signed char c2 = 256; // assuming 8-bit chars, the value of c2 is undefinedKoostaja rakendab neid sama tüüpi konversioone, kui kasutame ühe tüübi väärtust, kui eeldatakse muud tüüpi väärtust.
int i = 42;if (i) // condition will evaluate as truei = 0;Kui see väärtus = 0, siis on tingimus vale; kõik muud (nullist erinevad) väärtused annavad tõene. Sama mõiste kohaselt, kui kasutame booli aritmeetilises avaldises, teisendatakse selle väärtus alati väärtuseks 0 või 1. Seetõttu on booli kasutamine aritmeetilises avaldises tavaliselt peaaegu vale.
Ettevaatust: Ärge segage allkirjastatud ja allkirjastamata tüüpe
Avaldised, mis segavad allkirja ja allkirja, võivad anda üllatavaid ja valesid tulemusi, kui allkirjastatud väärtus on negatiivne. Nagu eespool arutletud, teisendatakse allkirjastatud väärtused automaatselt allkirjastamata.
Näiteks aritmeetilises avaldises nagu
x* yKui x on -1 ja y on 1 ning kui mõlemad on x ja y on int, siis on väärtus ootuspäraselt -1.
Kui x on int ja y on allkirjastamata, siis sõltub selle avaldise väärtus sellest, mitu bitti on täisarv kompileerimismasinal. Meie masinas annab see väljend 4294967295.
Registreerige muutujad
Registrimuutujate juurde pääseb kiiremini kui mälumuuturitega. Seega saab C ++ programmis sageli kasutatavaid muutujaid registrimärksõna abil registritesse panna . Registri märksõna käsib kompilaatoril antud muutuja registrisse salvestada. See on koostaja valik, kas lisada see registrisse või mitte. Üldiselt teevad koostajad ise erinevaid optimeerimisi, mis hõlmavad mõne muutuja registrisse kandmist. C ++ programmi registrimuutujate arv pole piiratud. Kuid koostaja ei pruugi muutujat registrisse salvestada. Seda seetõttu, et registrimälu on väga piiratud ja OS kasutab seda enamasti.
Defineerida:
register int i;Kommentaarid
Kommentaarid on kompilaatori ignoreeritud koodi osad. See võimaldab programmeerijal teha märkmeid lähtekoodi / programmi asjakohastes piirkondades. Kommentaarid tulevad kas plokkidena või üksikute ridadena. Programmi kommentaarid on selgitavad väited. Selle saab lisada C ++ koodi, mis aitab kõigil selle lähtekoodi lugeda. Kõik programmeerimiskeeled võimaldavad mingisuguseid kommentaare. C ++ toetab nii ühe- kui ka mitmerealisi kommentaare.
- Üherealised kommentaarid on need, mis algavad tähega // ja jätkuvad kuni rea lõpuni. Kui kommentaarirea viimane märk on \, jätkub kommentaar järgmisel real.
- Mitmerealised kommentaarid algavad tähega / * ja lõpevad tähega * /.
/* This is a comment *//* C++ comments can also* span multiple lines*/Põgenemisjärjestused
Mõnel tähemärgil, näiteks tagasilükkeklahvil ja kontrollmärkidel, pole nähtavat pilti. Selliseid märke nimetatakse mittetrükitavateks märkideks. Teistel tähemärkidel (üksik- ja topeltjutumärgid, küsimärk ja tagasilöögikiri) on paljudes programmeerimiskeeles eriline tähendus.
Meie programmid ei saa ühtegi neist tähemärkidest otse kasutada. Selle asemel võime sellise sümboli tähistamiseks kasutada põgenemisjärjestust. Põgenemisjärjestus algab tagasilöögiga.
C ++ programmeerimiskeel määratleb mitu põgenemisjärjestust:
Mida see teeb?
Iseloom
Uus rida
\ n
Vertikaalne vahekaart
\ v
Tagasi kaldkriips
\\
Vankri tagasipöördumine
\ r
Horisontaalne sakk
\ t
Tagasilükkeklahv
\ b
Küsimärk
\?
Vormisööt
\ f
Hoiatus (kell)
\ a
Topelttsiteerimine
\ "
Üksik tsitaat
\ '
Me kasutame põgenemisjärjestust nii, nagu oleks see üks tähemärk:
cout << '\n'; // prints a newlinecout << "\tguru99!\n"; // prints a tab followed by "guru99!" and a newlineSamuti võime kirjutada üldistatud põgenemisjärjestusi \ x, millele järgneb üks või mitu kuueteistkümnendkohalist numbrit. Või kasutame \, millele järgneb üks, kaks või kolm kaheksakohalist numbrit. Üldistatud põgenemisjärjestus tähistab märgi arvväärtust. Mõned näited (eeldades ladina-1 tähemärkide komplekti):
\7 (bell) \12 (newline) \40 (blank)\0 (null) \115 ('M') \x4d ('M')Saame kasutada eelnevalt määratletud põgenemisjärjestusi, nagu ka muid märke.
cout << "Hi \x4dO\115!\n"; // prints Hi MOM! followed by a newlinecout << '\115' << '\n'; // prints M followed by a newlineKokkuvõte
- C ++ muutuja annab meile nimelise salvestusvõime.
- C ++ muutuja tüübid: int, double, char, float, string, bool jne.
- Sisaldatavat (või sisestatud) ulatust nimetatakse sisemiseks ulatuseks ja sisaldav ulatus on väliseks ulatuseks.
- Ühte tüüpi muutuja saab teisendada teiseks. Seda tuntakse kui "tüüpi teisendamist".
- Registrimuutujate juurde pääseb kiiremini kui mälumuuturitega.
- Kommentaarid on kompilaatori ignoreeritud koodi osad.
- Mõnel tähemärgil, näiteks tagasilükkeklahvil ja kontrollmärkidel, pole nähtavat pilti.