Muuttujat C ++: ssa
C ++ -muuttuja tarjoaa meille nimellisen tallennuskapasiteetin. Sen avulla ohjelmoija voi manipuloida tietoja tarpeen mukaan. Jokaisella muuttujalla on tyyppi C ++. Muuttujatyyppi auttaa määrittämään muuttujan muistikartan koon ja asettelun, muistiin tallennettavien arvojen alueen ja siihen sovellettavat toimintojoukot.
Tässä C ++ -opetusohjelmassa opit:
- Muuttujat C ++: ssa
- Muuttujien perustyypit C ++: ssa
- Muuttujien ilmoittamisen säännöt C ++: ssa
- C ++ -muuttujatyypit
- Muuttujan nimi tai tunnisteet
- Const Qualifier C ++ -pelissä
- Muuttujien laajuus C ++: ssa
- Muuttujan tyypin muunnos
- Rekisteröi muuttujat
- Pakosarjat
Muuttujien perustyypit C ++: ssa
Tässä ovat C ++ -muuttujien perustyypit:
Int:
Kokonaisluku on numeerinen literaali (liittyy numeroihin) ilman murtolukua tai eksponentiaalista osaa. Esimerkki. 120, -90 jne.
Kaksinkertainen:
Se on kaksitarkkuuksinen liukuluku. Esimerkki: 11.22, 2.345
Hiiltyä:
Hahmolitraali luodaan liittämällä yksi merkki lainausmerkeihin. Esimerkiksi: 'a', 'm', 'F', 'P', '}' jne.
Kellua:
Liukulukuinen literaali on numeerinen literaali, jolla on joko murto- tai eksponenttimuoto. Esimerkiksi: 1.3, 2.6
Jousisitaalit:
Merkkijonon kirjaimellinen merkkijono on kaksoislainausmerkeissä. Esimerkiksi: "Kuinka voit?"
Bool:
Se pitää loogisen arvon tosi tai epätosi.
Muuttujien ilmoittamisen säännöt C ++: ssa
Tässä muutamia yleisiä sääntöjä muuttujan nimeämiselle:
- C ++ -muuttujan nimessä voi olla vain aakkoset, numerot ja alaviivat.
- C ++ -muuttujan nimi ei voi alkaa numerolla.
- Muuttujien nimet eivät saa alkaa isoilla kirjaimilla.
- C ++: ssa käytetty muuttujan nimi ei voi olla avainsana. Esimerkiksi int on avainsana, jota käytetään merkitsemään kokonaislukuja.
- C ++ -muuttujan nimi voi alkaa alaviivalla. Sitä ei kuitenkaan pidetä hyvänä käytäntönä.
C ++ -muuttujatyypit
C ++ määrittelee koko joukon primitiivisiä tyyppejä
Mitätön tyyppi ei ole liittynyt arvojen kanssa ja voidaan käyttää vain muutama olosuhteissa. Se on yleisimmin sellaisten funktioiden palautustyyppi, jotka eivät palauta arvoa.
Aritmeettinen tyypit sisältävät merkkejä, kokonaislukuja, loogisia arvoja, ja liukulukuina. Aritmeettinen tyyppi, jos se jaetaan edelleen kahteen luokkaan
- Liukuluku tyypit . Kelluva (tai kelluva tyyppi) edustaa desimaalilukuja. IEEE-standardi määrittää vähimmäismäärän merkittäviä numeroita. Useimmat kääntäjät tarjoavat yleensä enemmän tarkkuutta kuin määritetty minimi. Tavallisesti kellukkeita edustaa 32 bittiä, kaksinkertaistuu 64 bitillä ja pitkiä kaksinkertaistuu joko 96 tai 128 bitillä.
- Integraalityypit (jotka sisältävät merkki-, kokonaisluku- ja Boolen-tyypit). Boolen tyyppi on vain kahdenlaisia arvoja: Oikein vai väärin. On olemassa useita char- tyyppejä, joista suurin osa on olemassa kansainvälistymisen tukemiseksi. Perusmerkkityyppi on char. Char on samankokoinen kuin yksi konetavu, mikä tarkoittaa yhtä tavua.
Integral tyypit voidaan allekirjoittaa tai allekirjoittamattomien.
Allekirjoitettu tyyppi : Ne edustavat negatiivisia tai positiivisia lukuja (nolla mukaan lukien). Allekirjoitetussa tyypissä alue on jaettava tasaisesti + ve- ja -ve-arvojen välillä. Siten 8-bittinen allekirjoitettu merkki pitää arvot välillä -127 - 127.
Allekirjoittamaton tyyppi : Allekirjoittamattomassa tyypissä kaikki arvot ovat> = 0. 8-bittinen allekirjoittamaton merkki voi sisältää 0 - 255 (molemmat mukaan lukien).
Muuttujan nimi tai tunnisteet
Tunnisteet voivat koostua joistakin kirjaimista, numeroista ja alaviivan merkistä tai jostakin niiden yhdistelmästä. Nimen pituutta ei ole rajoitettu.
Tunnisteiden on oltava
- alkaa joko kirjaimella tai alaviivalla ('_').
- Ja ovat kirjainkokoisia; isot ja pienet kirjaimet ovat erilliset:
// määrittelee neljä erilaista int-muuttujaa
int guru99, gurU99, GuRu99, GURU99;
C ++ -kieli on varannut joitain nimiä sen käyttöön.
Muuttujien nimeämiselle eri ohjelmointikielillä on monia hyväksyttyjä käytäntöjä. Näiden käytäntöjen noudattaminen voi parantaa ohjelman luettavuutta.
- Tunnisteen tulisi antaa ainakin jonkin verran viitteitä sen merkityksestä.
- Muuttujien nimet ovat yleensä pieniä kirjaimia-guru99, eivät Guru99 tai GURU99.
- Määrittelemämme luokat alkavat yleensä isolla kirjaimella.
- Tunnuksia, jotka sisältävät useita sanoja, tulisi erottaa jokainen sana visuaalisesti. Esimerkiksi guru99_website ei guru99website.
C ++ - muuttujailmoitus ja määritelmä
Muuttujan ilmoittaminen tekee nimen tiedoksi ohjelmalle siinä määritellyssä laajuudessa. Esimerkki:
int a=5;int b;char c='A';
int a,b;a=b=1000;
List initializationint a(5);int b{5};
Const Qualifier C ++ -pelissä
Oletetaan, että on vaihteleva buffsize, joka ilmoittaa käyttäjältä otettavien syötteiden määrän. Tässä emme halua muuttaa buffsize-arvoa koko ohjelmassa. Haluamme määritellä muuttujan, jonka arvon tiedämme, ettei sen pitäisi muuttua.
Käytä tällöin avainsanaa const
const int bufSize = 512; // input buffer size
Tämä määrittelee bufSize-vakion. Jokainen yritys määrittää bufSize tai muuttaa sitä antaa virheen.
Tässä emme voi muuttaa const-objektin arvoa sen luomisen jälkeen, se on pakollinen ilmoittamaan ja alustamaan. Muuten kääntäjä heittää virheen.
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
Muuttujien laajuus C ++: ssa
Laajuus on ohjelman alue, jossa muuttujalla on merkitys. Enimmäkseen samaa nimeä voidaan käyttää viittaamaan eri kokonaisuuksiin eri laajuuksissa. Muuttujat ovat näkyvissä siitä hetkestä, kun ne on ilmoitettu, sen ilmoituksen laajuuden loppuun saakka.
#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 < Tämä ohjelma määrittelee 3 nimeä, nimittäin pää, summa ja val. Se käyttää nimitilan nimeä std sekä kahta muuta nimeä kyseisestä nimitilasta-cout ja endl.
- Funktion nimi "main" määritetään kiharoiden aaltosulkeiden ulkopuolelle. Funktion nimellä main kuten useimmilla muilla funktion ulkopuolella määritellyillä nimillä on globaali laajuus. Mikä tarkoittaa, että ilmoitettuaan maailmanlaajuiset nimet ovat käytettävissä koko ohjelmassa.
- Muuttuja summa määritetään sen lohkon puitteissa, joka on pääfunktion runko. Sitä voi käyttää ilmoituksen yhteydessä ja muualla päätoiminnon rungossa. Ei kuitenkaan sen ulkopuolella. Tämä tarkoittaa, että muuttuvalla summalla on estolaajuus .
- Muuttuja val määritellään "for lause" -alueella. Sitä voidaan helposti käyttää kyseisessä lauseessa, mutta ei muualla päätoiminnossa. Sillä on paikallinen ulottuvuus .
Sisäkkäinen soveltamisala
Laajuus voi sisältää muita laajuuksia. Sisällytettyyn (tai sisäkkäiseen) laajuuteen viitataan sisäisenä. Sisältävä soveltamisala on ulompi.
#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;} Lähtö # 1 näkyy ennen uudelleenkäytön paikallista määritelmää. Siten tämä tuotos
lause on se, joka käyttää uudelleenkäytettyä nimeä, joka on määritelty globaalisti. Tämä lausunto tuottaa
42 0
Tulos # 2 tapahtuu uudelleenkäytetyn paikallisen määritelmän jälkeen. Se kuuluu nyt soveltamisalaan. Siksi tässä toisessa lähtölausekkeessa käytetään yksinkertaisesti paikallista objektia, jonka nimi on uudelleenkäytetty, eikä globaalia ja lähtöjä
0 0
Lähtö # 3 ohittaa oletusarvosäännöt soveltamisalaoperaattorilla. Globaalilla laajuudella ei ole nimeä. Siten, kun laajuusoperaattorilla (: :) on tyhjä vasen puoli. Se tulkitsee sen pyynnön noutaa nimi globaalin laajuuden oikealta puolelta. Täten lauseke käyttää globaalia uudelleenkäyttöä ja tuotoksia
42 0
Muuttujan tyypin muunnos
Yhden tyyppinen muuttuja voidaan muuntaa toiseen. Se tunnetaan nimellä "Type Conversion". Katsotaanpa säännöt eri C ++ -muuttujatyyppien muuntamiseksi:
Ei-boolin määrittäminen bool-muuttujaan antaa epätodennäköisyyden, jos arvo on 0, ja tosi muuten.
bool b = 42; // b is trueBoolin määrittäminen jollekin muulle aritmeettiselle tyypille tuottaa 1, jos bool on tosi ja 0, jos bool on väärä.
bool b = true;int i = b; // i has value 1Liukuluku-arvon määrittäminen int-tyyppiselle muuttujalle tuottaa arvon, joka on katkaistu. Tallennettu arvo on desimaalipistettä edeltävä osa.
int i = 3.14; // i has value 3Int-arvon määrittäminen float-tyyppiselle muuttujalle johtaa murto-osan nollaksi. Tarkkuus menetetään yleensä, jos kokonaisluvulla on enemmän bittejä kuin kelluva muuttuja mahtuu.
Int i=3;double pi = i; // pi has value 3.0Jos yritämme määrittää alueen ulkopuolella olevan arvon muuttujalle, joka ei ole allekirjoitettu, tuloksena on loppuosa arvosta% (modulo)
Esimerkiksi 8-bittinen allekirjoittamaton char-tyyppi voi pitää arvoja välillä 0–255. Arvon osoittaminen tämän alueen ulkopuolelle johtaa kääntäjään varaamaan loppuosan arvosta modulo 256. Siksi yllä olevan logiikan mukaan -1: n osoittaminen 8-bittiselle allekirjoittamattomalle merkille antaa tälle objektille arvon 255.
unsigned char c = -1; // assuming 8-bit chars, c has value 255Jos yritämme määrittää alueen ulkopuolisen arvon allekirjoitetun tyyppiselle objektille, tulos on arvaamaton. Se on määrittelemätön. Ohjelma saattaa näyttää toimivan ulkopuolelta, se saattaa kaatua tai tuottaa roska-arvoja.
signed char c2 = 256; // assuming 8-bit chars, the value of c2 is undefinedKääntäjä käyttää näitä samantyyppisiä tuloksia, kun käytämme yhden tyyppistä arvoa, jossa odotetaan muun tyyppistä arvoa.
int i = 42;if (i) // condition will evaluate as truei = 0;Jos tämä arvo = 0, ehto on väärä; kaikki muut (nollasta poikkeavat) arvot ovat tosi. Samalla käsitteellä, kun käytämme boolia aritmeettisessa lausekkeessa, sen arvo muunnetaan aina arvoksi 0 tai 1. Tämän seurauksena boolin käyttö aritmeettisessa lausekkeessa on yleensä melkein varmasti virheellistä.
Varoitus: Älä sekoita allekirjoitettuja ja allekirjoittamattomia tyyppejä
Lausekkeet, jotka sekoittavat allekirjoitettua ja allekirjoittamatonta, voivat tuottaa yllättäviä ja vääriä tuloksia, kun allekirjoitettu arvo on negatiivinen. Kuten yllä todettiin, allekirjoitetut arvot muunnetaan automaattisesti allekirjoittamattomiksi.
Esimerkiksi aritmeettisessa lausekkeessa kuten
x* yJos x on -1 ja y on 1 ja jos sekä x että y ovat int, niin arvo on odotetusti -1.
Jos x on int ja y ovat allekirjoittamattomia, niin tämän lausekkeen arvo riippuu siitä, kuinka monta bittiä kokonaisluvulla on kääntölaitteessa. Koneellamme tämä lauseke tuottaa 4294967295.
Rekisteröi muuttujat
Rekisterimuuttujiin pääsee nopeammin kuin muistimuuttujiin. Joten muuttujat, joita käytetään usein C ++ - ohjelmassa, voidaan laittaa rekistereihin rekisterihakusanalla . Rekisterin avainsana käskee kääntäjää tallentamaan annetun muuttujan rekisteriin. Kääntäjän valinta on lisätä se rekisteriin vai ei. Yleensä kääntäjät itse tekevät erilaisia optimointeja, jotka sisältävät osan muuttujista rekisteriin. C ++ -ohjelman rekisterimuuttujien lukumäärää ei ole rajoitettu. Kääntäjä ei kuitenkaan välttämättä tallenna muuttujaa rekisteriin. Tämä johtuu siitä, että rekisterimuisti on hyvin rajallinen, ja käyttöjärjestelmä käyttää sitä yleensä.
Määritä:
register int i;Kommentit
Kommentit ovat kääntäjän ohittamia koodin osia. Sen avulla ohjelmoija voi tehdä muistiinpanoja lähdekoodin / ohjelman asiaankuuluville alueille. Kommentit tulevat joko lohkoina tai yksirivisinä. Ohjelman kommentit ovat selittäviä lausuntoja. Se voidaan sisällyttää C ++ -koodiin, joka auttaa kaikkia lukemaan lähdekoodia. Kaikki ohjelmointikielet sallivat jonkinlaisen kommentin. C ++ tukee sekä yksirivisiä että monirivisiä kommentteja.
- Yksiriviset kommentit ovat niitä, jotka alkavat //: llä ja jatkuvat rivin loppuun asti. Jos kommentirivin viimeinen merkki on \, kommentti jatkuu seuraavalla rivillä.
- Moniriviset kommentit alkavat / * ja päättyvät * /.
/* This is a comment *//* C++ comments can also* span multiple lines*/Pakosarjat
Joillakin merkeillä, kuten askelpalautuksella ja ohjausmerkeillä, ei ole näkyvää kuvaa. Tällaisia merkkejä kutsutaan ei-tulostettaviksi merkeiksi. Muilla merkeillä (yksi- ja kaksinkertaiset lainausmerkit, kysymysmerkki ja taaksepäin) on erityinen merkitys monilla ohjelmointikielillä.
Ohjelmamme eivät pysty käyttämään näitä merkkejä suoraan. Sen sijaan voimme käyttää pakosarjaa edustamaan tällaista merkkiä. Pakosarja alkaa taaksepäin.
C ++ - ohjelmointikieli määrittelee useita pakosarjoja:
Mitä se tekee?
Merkki
Uusi rivi
\ n
Pysty-välilehti
\ v
Kenoviiva
\\
Vaunun paluu
\ r
Vaaka-välilehti
\ t
Askelpalautin
\ b
Kysymysmerkki
\?
Formfeed
\ f
Varoitus (soittokello)
\ a
Kaksoislainaus
\ "
Yksi tarjous
\ '
Käytämme pakosarjaa ikään kuin se olisi yksi merkki:
cout << '\n'; // prints a newlinecout << "\tguru99!\n"; // prints a tab followed by "guru99!" and a newlineVoimme myös kirjoittaa yleisiä pakosarjoja \ x, joita seuraa yksi tai useampi heksadesimaaliluku. Tai käytämme \, jota seuraa yksi, kaksi tai kolme oktaalinumeroa. Yleistetty pakosarja edustaa merkin numeerista arvoa. Joitakin esimerkkejä (olettaen Latin-1-merkkisarja):
\7 (bell) \12 (newline) \40 (blank)\0 (null) \115 ('M') \x4d ('M')Voimme käyttää ennalta määritettyjä pakosarjoja, kuten mitä tahansa muuta merkkiä.
cout << "Hi \x4dO\115!\n"; // prints Hi MOM! followed by a newlinecout << '\115' << '\n'; // prints M followed by a newlineYhteenveto
- C ++ -muuttuja tarjoaa meille nimellisen tallennuskapasiteetin.
- C ++ -muuttujatyypit: int, double, char, float, string, bool jne.
- Sisällytettyyn (tai sisäkkäiseen) laajuuteen viitataan sisäisenä laajuutena, ja sisältävä laajuus on ulompi.
- Yhden tyyppinen muuttuja voidaan muuntaa toiseen. Se tunnetaan nimellä "Type Conversion".
- Rekisterimuuttujiin pääsee nopeammin kuin muistimuuttujiin.
- Kommentit ovat kääntäjän ohittamia koodin osia.
- Joillakin merkeillä, kuten askelpalautuksella ja ohjausmerkeillä, ei ole näkyvää kuvaa.