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

  1. 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รค.
  2. 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).

C++ Muuttuvan tietotyypit

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.

Muuttujan nimi tai tunnisteet

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.

Tiivistรค tรคmรค viesti seuraavasti: