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.

  • ๐Ÿ“ฆ Vad det รคr: A variable is a named storage location that holds a value in memory.
  • ๐Ÿ”ค Deklaration: Declare a variable with a type and name, like int age = 25;.
  • ๐Ÿ”ข Datatyper: C++ has types such as int, float, double, char, and bool.
  • ๐Ÿ”’ const: The const qualifier makes a variableโ€™s value read-only.
  • ๐ŸŒ Omfattning: A variableโ€™s scope is the region of code where it can be used.
  • ๐Ÿค– AI-hjรคlp: AI tools like GitHub Copilot declare and convert C++ variables instantly.

C++ Variabler och datatyper

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

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

C++ Variabla datatyper

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.

Variabelnamn eller identifierare

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 

Vanliga frรฅgor

En variabel i C++ is a named storage location in memory that holds a value. It has a data type that defines what it can store, and its value can change during the program.

Det grundlรคggande C++ data types are int for integers, float and double for decimal numbers, char for single characters, and bool for true or false values.

A variable name can contain letters, digits, and underscores, must start with a letter or underscore, cannot be a reserved keyword, and is case-sensitive.

The const qualifier makes a variable read-only, so its value cannot change after it is initialized. It is used for values that should stay constant, such as PI.

Scope is the part of a program where a variable can be accessed. Local variables exist inside a function or block, while global variables are accessible throughout the program.

Type conversion changes a value from one data type to another, either automatically (implicit) or manually with a cast (explicit), such as converting an int to a float.

AI assistants like GitHub Copilot autocomplete variable declarations, suggest the right data type, and generate type-conversion code from a short comment as you write.

Yes. AI-powered tools flag uninitialized variables, type mismatches, and narrowing conversions, and suggest safer types, helping prevent bugs before you compile.

Sammanfatta detta inlรคgg med: