C++ Muuttujat ja tyypit: Int, Char, Float, Double, String & Bool
Muuttujat sisään C++
A C++ muuttuja tarjoaa meille nimetyn tallennuskyvyn. Sen avulla ohjelmoija voi käsitellä tietoja tarpeen mukaan. Jokaisella muuttujalla on tyyppi C++. Muuttujan tyyppi auttaa määrittämään muuttujan muistikartan koon ja asettelun, kyseiseen muistiin tallennettavien arvojen alueen ja siihen sovellettavien toimintojen joukon.
Muuttujien perustyypit C++
Tässä ovat perustyypit C++ muuttujat:
Int:
Kokonaisluku on numeerinen literaali (liittyy numeroihin) ilman murto- tai eksponentiaalista osaa. Esimerkki. 120, -90 jne.
Double:
Se on kaksinkertainen tarkkuus liukulukuarvo. Esimerkki: 11.22, 2.345
Hiiltyä:
Merkiliteraali luodaan sisällyttämällä yksi merkki yksittäisiin lainausmerkkeihin. Esimerkiksi: 'a', 'm', 'F', 'P', '}' jne.
Kellua:
Liukulukuliteraali on numeerinen literaali, jolla on joko murto- tai eksponenttimuoto. Esimerkiksi: 1.3, 2.6
Jousisitaalit:
Merkkijonoliteraali on merkkijono, joka on suljettu lainausmerkkeihin. Esimerkiksi: "Kuinka voit?"
Bool:
Se pitää Boolen arvon tosi tai epätosi.
Muuttujien ilmoittamisen säännöt C++
Tässä on joitain yleisiä sääntöjä muuttujan nimeämiseksi:
- A C++ muuttujan nimessä voi olla vain aakkoset, numerot ja alaviivat.
- A C++ muuttujan nimi ei voi alkaa numerolla.
- Muuttujien nimet eivät saa alkaa isoilla kirjaimilla.
- Muuttujan nimi, jota käytetään C++ ei voi olla avainsana. Esimerkiksi int on avainsana, jota käytetään merkitsemään kokonaislukuja.
- A C++ muuttujan nimi voi alkaa alaviivalla. Sitä ei kuitenkaan pidetä hyvänä käytäntönä.
C++ Muuttuvan tietotyypit
C++ määrittelee kokonaisen joukon primitiivityyppejä
- mitätöidä Typellä ei ole siihen liittyviä arvoja, ja sitä voidaan käyttää vain harvoissa olosuhteissa. Se on yleisimmin palautustyyppi funktioille, jotka eivät palauta arvoa.
- aritmeettiset tyypit sisältää merkkejä, kokonaislukuja, Boolen arvoja ja liukulukuja. Aritmeettinen tyyppi, jos se jaetaan edelleen kahteen kategoriaan
- Liukulukutyypit. Kelluva (tai kelluva tyyppi) edustaa desimaalilukuja. IEEE-standardi määrittää merkitsevien numeroiden vähimmäismäärän. Useimmat kääntäjät tarjoavat yleensä enemmän tarkkuutta kuin määritetty minimi. Tyypillisesti kellukkeet esitetään 32-bittisinä, kaksinkertaiset 64-bittiset ja pitkät tuplaukset joko 96- tai 128-bittisinä.
- Integraalityypit (jotka sisältävät merkkejä, kokonaislukuja ja Boolen tyyppejä). The boolean typellä on vain kahdenlaisia arvoja: True tai False. On useita sotavaunut tyyppejä, joista suurin osa on olemassa kansainvälistymisen tukemiseksi. Perushahmotyyppi on char. Merkki on samankokoinen kuin yksi konetavu eli yksi tavu.
- Integraalityypit voi olla allekirjoitettu tai allekirjoittamaton.
Allekirjoitettu tyyppi: Ne edustavat negatiivisia tai positiivisia lukuja (mukaan lukien nolla). Etumerkityssä tyypissä alue on jaettava tasaisesti +ve- ja -ve-arvojen välillä. Siten 8-bittinen etumerkki sisältää arvot -127:stä 127:ään.
Allekirjoittamaton tyyppi: Etumerkittömässä tyypissä kaikki arvot ovat >= 0. 8-bittinen etumerkitön merkki voi sisältää 0 - 255 (molemmat mukaan lukien).
Muuttujan nimi tai tunnisteet
Tunnisteet voivat koostua joistakin kirjaimista, numeroista ja alaviivamerkistä tai niiden yhdistelmästä. Nimen pituutta ei ole rajoitettu.
Tunnisteet on
- alkaa joko kirjaimella tai alaviivalla ('_').
- Ja kirjainkoolla on merkitystä; Isot ja pienet kirjaimet eroavat toisistaan:
// määrittelee neljä erilaista int-muuttujaa
int guru99, gurU99, GuRu99, GURU99;
- C++ kieli on varannut joitain nimiä käyttöä varten.
Muuttujien nimeämisessä on monia hyväksyttyjä käytäntöjä eri ohjelmointikieliä. Näiden käytäntöjen noudattaminen voi parantaa ohjelman luettavuutta.
- Tunnisteen tulee antaa ainakin jokin viite sen merkityksestä.
- Muuttujien nimet ovat yleensä pieniä kirjaimia – guru99, eivät Guru99 tai GURU99.
- Määrittämämme luokat alkavat yleensä isolla kirjaimella.
- Useita sanoja sisältävien tunnisteiden tulee erottaa jokainen sana visuaalisesti. Esimerkiksi guru99_website ei guru99website.
C++ Muuttujan ilmoitus ja määritelmä
Muuttujan määrittely tekee ohjelman tiedoksi nimen siinä laajuudessa, jossa se on määritelty. Esimerkki:
int a=5; int b; char c='A';
int a,b; a=b=1000;
List initialization int a(5); int b{5};
Const-karsinta sisään C++
Oletetaan, että on muuttuja buffsize, joka ilmoittaa käyttäjältä otettavien syötteiden määrän. Tässä emme halua muuttaa buffsize-arvoa koko ohjelman ajan. Haluamme määritellä muuttujan, jonka arvo ei saa muuttua.
Käytä siinä tapauksessa avainsanaa const
const int bufSize = 512; // input buffer size
Tämä määrittelee bufSizen vakioksi. Jokainen yritys määrittää tai muuttaa bufSizea antaa virheen.
Tässä emme voi muuttaa const-objektin arvoa sen luomisen jälkeen, sen on oltava pakollinen ilmoittaa ja alustettava. Muussa tapauksessa kääntäjä antaa virheen.
const int i = get_size(); // ok: initialized at run time const int j = 42; // ok: initialized at compile time const int k; // error: k is uninitialized const int i = 42; const int ci = i; // ok: the value in i is copied into ci
Muuttujien laajuus sisällä C++
Soveltamisala on ohjelman jakso, jossa muuttujalla on merkitys. Useimmiten samaa nimeä voidaan käyttää viittaamaan eri entiteeteihin eri laajuuksissa. Muuttujat ovat näkyvissä niiden ilmoittamisesta sen soveltamisalan loppuun, jossa ne esiintyvät.
#include <iostream> int main() { int sum = 0; // sum values from 1 through 10 inclusive for (int val = 1; val <= 10; ++val) sum += val; // equivalent to sum = sum + val cout << "Sum of 1 to 10 inclusive is "<< sum <<endl; return 0; }
Tämä ohjelma määrittelee 3 nimeä, eli main, summa ja arvo. Se käyttää nimiavaruuden nimeä std sekä kahta muuta nimeä kyseisestä nimiavaruudesta – cout ja endl.
- Funktionimi "main" on määritelty kihara aaltosulkeiden ulkopuolella. Funktionimellä main – kuten useimmilla muillakin funktion ulkopuolella määritellyillä nimillä – on yleinen laajuus. Mikä tarkoittaa, että kun on ilmoitettu, nimet, jotka ovat maailmanlaajuisesti ovat käytettävissä koko ohjelman ajan.
- Muuttuva summa määritellään sen lohkon puitteissa, joka on pääfunktion runko. Sitä pääsee käsiksi sen ilmoituspisteestä ja muusta päätoiminnon rungosta. Ei kuitenkaan sen ulkopuolella. Tämä tarkoittaa, että muuttuvalla summalla on lohkon laajuus.
- Muuttuja val on määritelty "for lausekkeen" laajuudessa. Sitä voidaan helposti käyttää kyseisessä lausunnossa, mutta ei muualla pääfunktiossa. Sillä on paikallinen laajuus.
Sisäkkäinen laajuus
Alue voi sisältää muita laajuuksia. Sisältyä (tai sisäkkäistä) laajuutta kutsutaan sisäiseksi laajuudeksi. Sisältävä laajuus on ulompi laajuus.
#include <iostream> using 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 name int reused = 42; // reused has global scope int main() { int unique = 0; // unique has block scope // output #1: uses global reused; prints 42 0 cout << reused << " " << unique << endl; int reused = 0; // new, local object named reused hides global reused // output #2: uses local reused; prints 0 0 cout << reused << " " << unique << endl; // output #3: explicitly requests the global reused; prints 42 0 cout << ::reused << " " << unique << endl; return 0; }
Lähtö #1 näkyy ennen paikallista uudelleenkäytön määritelmää. Tämä tulos siis
lauseke on se, joka käyttää uudelleenkäytettyä nimeä, joka on määritelty globaalissa laajuudessa. Tämä lausunto tulostuu
42 0
Lähtö #2 tapahtuu paikallisen uudelleenkäytön määritelmän jälkeen. Se on nyt soveltamisalassa. Siksi tämä toinen tuloslause käyttää yksinkertaisesti paikallista objektia nimeltä uudelleen käytetty globaalin sijaan ja tulostaa
0 0
Lähtö #3 ohittaa oletusarvoiset rajaussäännöt käyttämällä laajuuden operaattori. Globaalilla laajuudella ei ole nimeä. Näin ollen, kun skooppioperaattorilla (::) on tyhjä vasen puoli. Se tulkitsee sen pyynnöksi hakea nimi globaalin laajuuden oikealla puolella. Siten lauseke käyttää globaalia uudelleen käytettyä ja tulostaa
42 0
Muuttujan tyypin muuntaminen
Yhden tyypin muuttuja voidaan muuntaa toiseksi. Se tunnetaan nimellä "tyyppimuunnos". Katsotaanpa eri muuntamisen säännöt C++ muuttuvat tyypit:
Ei-bololin määrittäminen bool-muuttujaan tuottaa false, jos arvo on 0 ja tosi muussa tapauksessa.
bool b = 42; // b is true
Todellisuuden määrittäminen jollekin muulle aritmeettiselle tyypille antaa arvon 1, jos loogisuus on tosi ja 0, jos loogisuus on epätosi.
bool b = true; int i = b; // i has value 1
Liukulukuarvon määrittäminen int-tyyppiselle muuttujalle tuottaa arvon, joka katkaistaan. Tallennettava arvo on desimaalipilkkua edeltävä osa.
int i = 3.14; // i has value 3
Int-arvon antaminen float-tyyppiselle muuttujalle johtaa murto-osaan nollaksi. Tarkkuus yleensä menetetään, jos kokonaisluvussa on enemmän bittejä kuin kelluva muuttuja pystyy vastaanottamaan.
Int i=3; double pi = i; // pi has value 3.0
Jos yritämme antaa etumerkittömälle muuttujalle alueen ulkopuolella olevan arvon, tuloksena on arvon loppuosa %(modulo)
Esimerkiksi 8-bittinen etumerkitön merkki voi sisältää arvot välillä 0 - 255, mukaan lukien. Tämän alueen ulkopuolella olevan arvon määrittäminen johtaa siihen, että kääntäjä määrittää loput tästä arvosta modulo 256. Siksi yllä olevan logiikan mukaan -1:n määritys 8-bittiselle etumerkittömälle merkille antaa objektille arvon 255.
unsigned char c = -1; // assuming 8-bit chars, c has value 255
Jos yritämme antaa alueen ulkopuolisen arvon etumerkittylle objektille, tulos on arvaamaton. Se on määrittelemätön. Ohjelma saattaa näyttää toimivan ulkopuolelta, se saattaa kaatua tai se saattaa tuottaa roskaarvoja.
signed char c2 = 256; // assuming 8-bit chars, the value of c2 is undefined
Kääntäjä käyttää näitä samantyyppisiä muunnoksia, kun käytämme yhden tyypin arvoa, kun odotetaan toisen tyyppistä arvoa.
int i = 42; if (i) // condition will evaluate as true i = 0;
Jos tämä arvo = 0, ehto on epätosi; kaikki muut (ei-nolla-arvot) antavat tosi. Saman käsitteen mukaan kun käytämme boolia aritmeettisessa lausekkeessa, sen arvo muunnetaan aina joko 0:ksi tai 1:ksi. Tästä johtuen boolin käyttö aritmeettisessa lausekkeessa on yleensä lähes varmasti väärin.
Varoitus: Älä sekoita allekirjoitettuja ja allekirjoittamattomia tyyppejä
Lausekkeet, joissa sekoittuvat etumerkilliset ja etumerkitmättömät, voivat tuottaa yllättäviä ja vääriä tuloksia, kun etumerkillinen arvo on negatiivinen. Kuten edellä mainittiin, etumerkityt arvot muunnetaan automaattisesti etumerkittämättömiksi.
Esimerkiksi aritmeettisessa lausekkeessa, kuten
x* y
Jos 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 etumerkittömiä, tämän lausekkeen arvo riippuu siitä, kuinka monta bittiä kokonaisluvulla on käännöskoneessa. Koneellamme tämä lauseke tuottaa 4294967295.
Rekisteröi muuttujat
Rekisterimuuttujat ovat nopeampia kuin muistimuuttujat. Joten muuttujat, joita käytetään usein a C++ Ohjelma voidaan laittaa rekistereihin käyttämällä ilmoittautua avainsana. Rekisterin avainsana käskee kääntäjää tallentamaan annetun muuttujan rekisteriin. Se on kääntäjän valinta, tallennetaanko se rekisteriin vai ei. Yleensä kääntäjät itse tekevät erilaisia optimointeja, joihin kuuluu joidenkin muuttujien sijoittaminen rekisteriin. A:n rekisterimuuttujien lukumäärää ei ole rajoitettu C++ ohjelmoida. Mutta kääntäjä ei välttämättä tallenna muuttujaa rekisteriin. Tämä johtuu siitä, että rekisterimuisti on hyvin rajallinen ja käyttöjärjestelmä käyttää sitä yleisimmin.
Määrittele:
register int i;
Kommentit
Kommentit ovat niitä koodin osia, jotka kääntäjä jättää huomiotta. Sen avulla ohjelmoija voi tehdä muistiinpanoja lähdekoodin/ohjelman asianmukaisille alueille. Kommentit ovat joko lohkomuodossa tai yksittäisriveinä. Ohjelman kommentit ovat perusteluja. Se voidaan sisällyttää C++ koodi, joka auttaa ketään, joka lukee sen lähdekoodia. Kaikki ohjelmointikielet sallivat jonkinlaisen kommentin. C++ tukee sekä yksirivisiä että monirivisiä kommentteja.
- Yksirivisiä kommentteja ovat ne, jotka alkavat // ja jatkuvat rivin loppuun. Jos kommenttirivin viimeinen merkki on \, kommentti jatkuu seuraavalla rivillä.
- Monirivisiä kommentteja ovat ne, jotka alkavat /* ja päättyvät */.
/* This is a comment */ /* C++ comments can also * span multiple lines */
Pakojaksot
Joillakin merkeillä, kuten askelpalautilla ja ohjausmerkeillä, ei ole näkyvää kuvaa. Tällaisia merkkejä kutsutaan ei-tulostettaviksi merkeiksi. Muilla merkeillä (yksi- ja kaksoislainausmerkit, kysymysmerkki ja kenoviiva) on erityinen merkitys monissa ohjelmointikielissä.
Ohjelmamme eivät pysty käyttämään mitään näistä merkeistä suoraan. Sen sijaan voimme käyttää estosekvenssiä edustamaan tällaista merkkiä. Escape-sekvenssi alkaa kenoviivalla.
- C++ ohjelmointikieli määrittää useita pakosarjoja:
Mitä se tekee? | Merkki |
---|---|
Uusi rivi | \n |
Pysty-välilehti | \v |
kenoviiva | \\ |
Kuljetuspaluu | \r |
Vaaka-välilehti | \t |
Backspace | \b |
Kysymysmerkki | \? |
Formfeed | \f |
Varoitus (kello) | \a |
Double lainata | \ ” |
Yksittäinen lainaus | \ ' |
Käytämme pakomerkkiä ikään kuin se olisi yksi merkki:
cout << '\n'; // prints a newline cout << "\tguru99!\n"; // prints a tab followed by "guru99!" and a newline
Voimme myös kirjoittaa yleistettyjä erotussarjoja \x, joita seuraa yksi tai useampi heksadesimaaliluku. Tai käytämme \, jota seuraa yksi, kaksi tai kolme oktaalinumeroa. Yleistetty erotussekvenssi edustaa merkin numeerista arvoa. Joitakin esimerkkejä (olettaen Latin-1 merkkijoukon):
\7 (bell) \12 (newline) \40 (blank) \0 (null) \115 ('M') \x4d ('M')
Voimme käyttää ennalta määritettyjä pakotussarjoja, kuten mitä tahansa muuta merkkiä.
cout << "Hi \x4dO\115!\n"; // prints Hi MOM! followed by a newline cout << '\115' << '\n'; // prints M followed by a newline
Yhteenveto
- A C++ muuttuja tarjoaa meille nimetyn tallennuskyvyn.
- C++ muuttujatyypit: int, double, sotavaunut, float, string, bool jne.
- Sisällytettyä (tai sisäkkäistä) laajuutta kutsutaan sisäiseksi laajuudeksi, ja sisältävää laajuutta kutsutaan ulkoiseksi laajuudeksi.
- Yhden tyypin muuttuja voidaan muuntaa toiseksi. Se tunnetaan nimellä "tyyppimuunnos".
- Rekisterimuuttujat ovat nopeampia kuin muistimuuttujat.
- Kommentit ovat niitä koodin osia, jotka kääntäjä jättää huomiotta.
- Joillakin merkeillä, kuten askelpalautilla ja ohjausmerkeillä, ei ole näkyvää kuvaa.