C++ Variabler och datatyper: Int, Char, Float, Double
โก Smart sammanfattning
En variabel i C++ is a named storage location that holds a value your program can use and change. Here you will learn C++ variable types, declaration rules, data types, scope, type conversion, and constants with examples.

Variabler i C++
A C++ variabel ger oss en namngiven lagringskapacitet. Det tillรฅter programmeraren att manipulera data efter behov. Varje variabel har en typ in C++. Variabeltypen hjรคlper till att bestรคmma storleken och layouten pรฅ variabelns minneskarta, intervallet av vรคrden som kan lagras i det minnet och uppsรคttningen av operationer som kan tillรคmpas pรฅ den.
Grundlรคggande typer av variabler i C++
Hรคr รคr de grundlรคggande typerna av C++ variabler:
Int:
Ett heltal รคr en numerisk bokstavlig (associerad med tal) utan nรฅgon brรฅkdel eller exponentiell del. Exempel. 120, -90 osv.
Double:
Det รคr ett flyttalsvรคrde med dubbel precision. Exempel: 11.22, 2.345
Rรถding:
En bokstavlig bokstav skapas genom att omsluta ett enda tecken inom enstaka citattecken. Till exempel: 'a', 'm', 'F', 'P', '}' osv.
Flyta:
En flyttalsliteral รคr en numerisk literal som har antingen en brรฅkform eller en exponentform. Till exempel: 1.3, 2.6
Strรคnglitteratur:
En bokstavlig strรคng รคr en sekvens av tecken som omges av dubbla citattecken. Till exempel: "Hur mรฅr du?"
Bool:
Den har det booleska vรคrdet sant eller falskt.
Regler fรถr att deklarera variabler i C++
Hรคr รคr nรฅgra vanliga regler fรถr att namnge en variabel:
- A C++ variabelnamn kan bara ha alfabet, siffror och understreck.
- A C++ variabelnamn kan inte bรถrja med ett nummer.
- Variabelnamn ska inte bรถrja med versaler.
- Ett variabelnamn som anvรคnds i C++ kan inte vara ett nyckelord. Till exempel รคr int ett nyckelord som anvรคnds fรถr att beteckna heltal.
- A C++ variabelnamn kan bรถrja med ett understreck. Det anses dock inte vara en bra praxis.
C++ Variabla datatyper
C++ definierar en hel uppsรคttning primitiva typer
Ocuco-landskapet ogiltig typ har inga associerade vรคrden med sig och kan anvรคndas i endast ett fรฅtal omstรคndigheter. Det รคr oftast som returtyp av funktioner som inte returnerar ett vรคrde.
Ocuco-landskapet aritmetiska typer inkluderar tecken, heltal, booleska vรคrden och flyttal. Aritmetisk typ om ytterligare uppdelad i 2 kategorier
- Flyttalstyper. Float (eller flytande typ) representerar decimaltal. IEEE-standarden specificerar ett minsta antal signifikanta siffror. De flesta kompilatorer ger vanligtvis mer precision รคn det angivna minimumet. Vanligtvis representeras flรถten med 32 bitar, dubblar i 64 bitar och lรฅnga dubblar i antingen 96 eller 128 bitar.
- Integraltyper (som inkluderar tecken, heltal och booleska typer). De Boolean typ har bara tvรฅ typer av vรคrden: True eller False. Det finns flera rรถding typer, av vilka de flesta finns fรถr att stรถdja internationalisering. Den mest grundlรคggande karaktรคrstypen รคr char. En char รคr samma storlek som en enda maskinbyte, vilket betyder en enda byte.
Ocuco-landskapet Integraltyper kan vara undertecknad eller osignerad.
Signerad typ: De representerar negativa eller positiva tal (inklusive noll). I en teckentyp mรฅste intervallet delas jรคmnt mellan +ve- och -ve-vรคrden. Sรฅledes kommer ett 8-bitars tecken hรฅlla vรคrden frรฅn โ127 till 127.
Osignerad typ: I en osignerad typ รคr alla vรคrden >= 0. Ett 8-bitars osignerat tecken kan innehรฅlla 0 till 255 (bรฅda inklusive).
Variabelnamn eller identifierare
Identifierare kan bestรฅ av vissa bokstรคver, siffror och understreckstecken eller nรฅgon kombination av dem. Ingen begrรคnsning sรคtts fรถr namnlรคngden.
Identifierare mรฅste
- bรถrja med antingen en bokstav eller ett understreck ('_').
- Och รคr skiftlรคgeskรคnsliga; stora och smรฅ bokstรคver รคr olika:
// definierar fyra olika int-variabler
int guru99, gurU99, GuRu99, GURU99;
Ocuco-landskapet C++ sprรฅket har reserverat nรฅgra namn fรถr dess anvรคndning.
Det finns mรฅnga accepterade konventioner fรถr att namnge variabler i olika programmeringssprรฅk. Att fรถlja dessa konventioner kan fรถrbรคttra programmets lรคsbarhet.
- En identifierare bรถr ge รฅtminstone en viss indikation pรฅ dess betydelse.
- Variabelnamn รคr vanligtvis gemener โ guru99, inte Guru99 eller GURU99.
- De klasser vi definierar bรถrjar vanligtvis med en stor bokstav.
- Identifierare som innehรฅller flera ord bรถr visuellt sรคrskilja varje ord. Till exempel guru99_website inte guru99website.
C++ Variabel deklaration och definition
En deklaration av en variabel gรถr ett namn kรคnt fรถr programmet i det omfรฅng som det definieras i. Exempel:
int a=5; int b; char c='A';
int a,b;
a=b=1000;
List initialization int a(5); int b{5};
Const Kval in C++
Anta att det finns en variabel buffsize som anger antalet ingรฅngar som ska tas frรฅn anvรคndaren. Hรคr vill vi inte รคndra vรคrdet pรฅ buffsize genom hela programmet. Vi vill definiera en variabel vars vรคrde vi vet inte bรถr รคndras.
Anvรคnd i sรฅ fall nyckelordet const
const int bufSize = 512; // input buffer size
Detta definierar bufSize som en konstant. Varje fรถrsรถk att tilldela eller รคndra bufSize ger ett fel.
Hรคr kan vi inte รคndra vรคrdet pรฅ ett const-objekt efter att vi skapat det, det mรฅste vara obligatoriskt att deklareras och initieras. Annars ger kompilatorn ett fel.
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
Omfattning av variabler i C++
Ett scope รคr ett span av ett program dรคr en variabel har en betydelse. Oftast kan samma namn anvรคndas fรถr att referera till olika enheter inom olika omfattningar. Variabler รคr synliga frรฅn den punkt dรคr de deklareras till slutet av det omfรฅng dรคr deras deklaration visas.
#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; }
Detta program definierar 3 namn, nรคmligen, huvud, summa och val. Den anvรคnder namnutrymmets namn std, tillsammans med tvรฅ andra namn frรฅn det namnomrรฅdet - cout och endl.
- Funktionsnamnet "main" definieras utanfรถr de lockiga klammerparenteserna. Funktionsnamnet main โ liksom de flesta andra namn som definieras utanfรถr en funktion โ har ett globalt omfรฅng. Vilket betyder att en gรฅng deklarerats, namn som finns pรฅ global rรคckvidd รคr tillgรคngliga genom hela programmet.
- Variabelsumman definieras inom ramen fรถr blocket som รคr huvudfunktionens kropp. Den kan nรฅs frรฅn dess deklarationsplats och genom resten av huvudfunktionens organ. Dock inte utanfรถr det. Detta innebรคr att variabel summa har blockera omfattning.
- Variabeln val definieras inom ramen fรถr "fรถr uttalande". Det kan lรคtt anvรคndas i det uttalandet men inte nรฅgon annanstans i huvudfunktionen. Det har lokal omfattning.
Kapslad omfattning
Omfattningen kan innehรฅlla andra omfattningar. Det inneslutna (eller kapslade) omfรฅnget kallas ett inre omfรฅng. Det innehรฅllande omfรฅnget รคr det yttre omfรฅnget.
#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; }
Utgรฅng #1 visas fรถre den lokala definitionen av รฅteranvรคndning. Alltsรฅ denna utgรฅng
satsen รคr den som anvรคnder det รฅteranvรคnda namnet som รคr definierat i globalt omfรฅng. Detta uttalande utdata
42 0
Utgรฅng #2 intrรคffar efter den lokala definitionen av รฅteranvรคndning. Det รคr nu i omfattning. Dรคrfรถr anvรคnder denna andra utdatasats helt enkelt det lokala objektet med namnet รฅteranvรคnd snarare รคn globalt och utdata
0 0
Utgรฅng #3 รฅsidosรคtter standardscoping regler med hjรคlp av scope operator. Den globala omfattningen har inget namn. Sรฅledes, nรคr scope-operatorn(::) har en tom vรคnster sida. Den tolkar det som en begรคran om att hรคmta namnet pรฅ hรถger sida av det globala omfรฅnget. Sรฅledes anvรคnder uttrycket den globala รฅteranvรคnda och utdata
42 0
Variabel typkonvertering
En variabel av en typ kan konverteras till en annan. Det รคr kรคnt som "Typomvandling". Lรฅt oss se reglerna fรถr att konvertera olika C++ variabeltyper:
Tilldelning av icke-bool till en bool-variabel ger falskt om vรคrdet รคr 0 och annars sant.
bool b = 42; // b is true
Att tilldela en bool till en av de andra aritmetiktyperna ger 1 om boolen รคr sann och 0 om boolen รคr falsk.
bool b = true; int i = b; // i has value 1
Att tilldela ett flyttalsvรคrde till en variabel av int-typ ger vรคrdet som trunkeras. Vรคrdet som lagras รคr delen fรถre decimalkomma.
int i = 3.14; // i has value 3
Tilldelning av ett int-vรคrde till en variabel av floattyp resulterar i att brรฅkdelen blir noll. Precisionen gรฅr vanligtvis fรถrlorad om heltalet har fler bitar รคn vad den flytande variabeln kan ta emot.
Int i=3; double pi = i; // pi has value 3.0
Om vi โโfรถrsรถker tilldela ett vรคrde utanfรถr intervallet till en variabel av typen utan tecken, blir resultatet resten av vรคrdet %(modulo)
Till exempel kan en 8-bitars osignerad teckentyp innehรฅlla vรคrden frรฅn 0 till och med 255. Att tilldela ett vรคrde utanfรถr detta intervall kommer att resultera i att kompilatorn tilldelar resten av det vรคrdet modulo 256. Dรคrfรถr, enligt logiken ovan, tilldelning av โ1 till ett 8-bitars osignerat tecken ger det objektet vรคrdet 255.
unsigned char c = -1; // assuming 8-bit chars, c has value 255
Om vi โโfรถrsรถker tilldela ett vรคrde utanfรถr intervallet till ett objekt av teckentyp รคr resultatet ofรถrutsรคgbart. Det รคr odefinierat. Programmet kan tyckas fungera pรฅ utsidan, eller det kan krascha, eller det kan producera skrรคpvรคrden.
signed char c2 = 256; // assuming 8-bit chars, the value of c2 is undefined
Kompilatorn tillรคmpar samma typ av konverteringar nรคr vi anvรคnder ett vรคrde av en typ dรคr ett vรคrde av en annan typ fรถrvรคntas.
int i = 42; if (i) // condition will evaluate as true i = 0;
Om detta vรคrde = 0, รคr โโvillkoret falskt; alla andra (ej noll) vรคrden ger sanna. Enligt samma koncept, nรคr vi anvรคnder en bool i ett aritmetiskt uttryck, omvandlas dess vรคrde alltid till antingen 0 eller 1. Som ett resultat รคr det oftast nรคstan sรคkert felaktigt att anvรคnda en bool i ett aritmetiskt uttryck.
Varning: Blanda inte signerade och osignerade typer
Uttryck som blandar signerat och osignerat kan ge รถverraskande och felaktiga resultat nรคr det signerade vรคrdet รคr negativt. Som diskuterats ovan konverteras teckenvรคrden automatiskt till osignerade.
Till exempel i ett aritmetiskt uttryck som
x* y
Om x รคr -1 och y รคr 1, och om bรฅde x och y รคr int, รคr vรคrdet, som fรถrvรคntat, -1.
Om x รคr int och y รคr utan tecken beror vรคrdet pรฅ detta uttryck pรฅ hur mรฅnga bitar ett heltal har pรฅ kompileringsmaskinen. Pรฅ vรฅr maskin ger detta uttryck 4294967295.
Registrera variabler
Registervariabler รคr snabbare att komma รฅt jรคmfรถrt med minnesvariabler. Sรฅ, variabler som ofta anvรคnds i en C++ program kan lรคggas in i register med hjรคlp av registrera nyckelord. Registernyckelordet talar om fรถr kompilatorn att lagra den givna variabeln i ett register. Det รคr kompilatorns val om den ska lรคggas in i ett register eller inte. Generellt gรถr kompilatorer sjรคlva olika optimeringar som inkluderar att lรคgga in nรฅgra av variablerna i registret. Det finns ingen grรคns fรถr antalet registervariabler i en C++ programmera. Men kompilatorn kanske inte lagrar variabeln i ett register. Detta beror pรฅ att registerminnet รคr mycket begrรคnsat och oftast anvรคnds av operativsystemet.
Att definiera:
register int i;
Kommentarer
Kommentarer รคr de delar av koden som ignoreras av kompilatorn. Det tillรฅter programmeraren att gรถra anteckningar i de relevanta omrรฅdena i kรคllkoden/programmet. Kommentarer kommer antingen i blockform eller enstaka rader. Programkommentarerna รคr fรถrklarande pรฅstรฅenden. Det kan ingรฅ i C++ kod som hjรคlper alla att lรคsa dess kรคllkod. Alla programmeringssprรฅk tillรฅter nรฅgon form av kommentarer. C++ stรถder bรฅde enkelradiga och flerradiga kommentarer.
- Enradiga kommentarer รคr de som bรถrjar med // och fortsรคtter till slutet av raden. Om det sista tecknet i en kommentarsrad รคr en \ sรฅ fortsรคtter kommentaren pรฅ nรคsta rad.
- Flerradiga kommentarer รคr de som bรถrjar med /* och slutar med */.
/* This is a comment */
/* C++ comments can also
* span multiple lines
*/
Escape Sequences
Vissa tecken, som backsteg och kontrolltecken, har ingen synlig bild. Sรฅdana tecken รคr kรคnda som icke-utskrivbara tecken. Andra tecken (enkla och dubbla citattecken, frรฅgetecken och snedstreck) har speciell betydelse i de mรฅnga programmeringssprรฅken.
Vรฅra program kan inte anvรคnda nรฅgon av dessa karaktรคrer direkt. Istรคllet kan vi anvรคnda en flyktsekvens fรถr att representera sรฅdan char. En flyktsekvens bรถrjar med ett snedstreck.
Ocuco-landskapet C++ programmeringssprรฅk definierar flera flyktsekvenser:
| Vad gรถr den? | Karaktรคr |
|---|---|
| Ny linje | \n |
| Vertikal flik | \v |
| bakstreck | \\ |
| Vagnretur | \r |
| Horisontell flik | \t |
| Backsteg | \b |
| Frรฅgetecken | \? |
| Formfeed | \f |
| Alert (klocka) | \a |
| Double citera | \ โ |
| Enstaka citat | \ ' |
Vi anvรคnder en escape-sekvens som om det vore ett enda tecken:
cout << '\n'; // prints a newline cout << "\tguru99!\n"; // prints a tab followed by "guru99!" and a newline
Vi kan ocksรฅ skriva generaliserade escape-sekvenser \x fรถljt av en eller flera hexadecimala siffror. Eller sรฅ anvรคnder vi en \ fรถljt av en, eller tvรฅ eller tre oktala siffror. Den generaliserade escape-sekvensen representerar tecknets numeriska vรคrde. Nรฅgra exempel (fรถrutsatt att Latin-1 char set):
\7 (bell) \12 (newline) \40 (blank) \0 (null) \115 ('M') \x4d ('M')
Vi kan anvรคnda fรถrdefinierade escape-sekvenser, eftersom vi anvรคnder vilket annat tecken som helst.
cout << "Hi \x4dO\115!\n"; // prints Hi MOM! followed by a newline cout << '\115' << '\n'; // prints M followed by a newline


