Lär dig att förstå C++ pekare (4 / 6 steg)

Steg 4: Använda pekare

PASSERAR ARGUMENT I EN FUNKTION

Det finns två sätt att passera argument till en funktion: antingen genom värde eller referens.

PASSERAR ARGUMENT AV VÄRDE

Normalt, skickas argument till funktioner av värdet, vilket innebär att det är värdet för den variabel som skickas till funktionen och inte variabeln själv.

Konsekvenserna av detta blir tydligt i den följande kodsnutt:

void fn (int nArg1, int nArg2)
{
ändra värden för argumenten
nArg1 = 10;
nArg2 = 20;
}

int main (int nNumberofArgs, char * pszArgs [])
{
initiaize två variabler och deras värden
int nValue1 = 1;
int nValue2 = 2;

nu försöker och ändra dem genom att anropa en funktion

FN (nValue1, nValue2);

Vad är värdet av nValue1 och nValue2 nu?
Cout cout
system ("paus")
Return 0;

}

Detta program deklareras två variabler, nValue1 och nValue2, initierar dem till några kända värde och passerar sedan deras värden till en funktion (fn). Den här funktionen ändras värdet av sina argument och helt enkelt returnerar.

Fråga: Vad är värdet av nValue1 och nValue2 i (huvudsakliga) efter kontrollen återgår från fn ()?

Svar: Värdet av nValue1 och nValue2 vara oförändrade på 1 och 2, respektive.

För att förstå varför, granska noga hur C++ hanterar minne i anropet till fn (). C++ lagrar lokala variabler (som nValue1 och nValue2) i ett speciellt område minne kallas stacken. Vid träder i funktion, C++ figurerar ut hur mycket stackminnet funktionen kommer att kräva och reserveras sedan detta belopp. Säga, för argument skull, att i det här exemplet stackminnet för (huvudsakliga) börjar på platsen 0x1000 och sträcker sig till 0x101F. I det här fallet nValue1 kan vara på plats 0x1000 och nValue2 kan vara på plats 0x1004.

(OBS: OM DU ANVÄNDER CODE::BLOCKS, EN INT TAR UPP 4 BYTE.)

Som en del av uppringningen till fn (), lagrar C++ först värdena för varje argument på stacken på argumentet längst till höger och arbetar sig till vänster.

Sista C++ lagrar som del av uppringningen avsändaradressen så att funktionen vet var man tillbaka efter den är klar.

Av skäl som har att göra mer med det inre arbetet i Processorn, stacken "växer nedåt", vilket innebär att minnet används av fn () har adresser mindre än 0x1000.

Kom ihåg att detta är bara en möjlig layout minne. Jag vet inte (eller hand) att någon av dessa i själva verket är de faktiska adresser som används av C++ i denna eller någon annan funktionsanropet.

Funktionen fn (heltal, heltal) innehåller två uttalanden:

nArg1 = 10;
nArg2 = 20;

Den viktigaste punkten i detta är att visa att ändra värdena på nArg1 och nArg2 har ingen effekt på de ursprungliga variablerna tillbaka på nValue1 och nValue2.

PASSERAR ARGUMENT MED HÄNVISNING

Så vad händer om jag ville de ändringar som gjorts av fn () ska vara permanent? Jag kunde göra detta genom att skicka inte värdet på variablerna men deras adress. Detta framgår av den följande kodsnutt:

void fn (int * pnArg1, int * pnArg2)
{
ändra värdet för argumenten
* pnArg1 = 10;
* pnArg2 = 20;
}

int main (int nNumberofArgs, char * pszArgs [])
{
initiera två variabler och deras värden
int nValue1 = 1;
int nValue2 = 2;

FN (& nValue1 & nValue2);

system ("paus")
Return 0;
}

Märke först att argumenten till fn () är nu inte förklarats vara heltal men pekare till heltal. Anropet till fn (int *, int *) passerar inte värdet på variablerna nValue1 och nValue2 men theie adresser.

Genom att använda pekare, blir ändringarna i de två variablerna permanent. Utan att använda pekare, görs ändringarna endast värden kopieras till fn ().

Se Steg
Relaterade Ämnen

Aluminium kan prydnader: Hur att förstöra ett par bra sax samtidigt spara miljön

de 3 rs återvinning är:MinskaÅteranvändaÅtervinnNu är jag allvarligt beroende av diet coke. Så skär att minska till 2 per dag.Jag spara burkar att återvinna, men hittade ett annat sätt att återanvända burkar göra till utsmyckningar för min utomhus se...

Hur man gör en osynlig bokhylla (utan att förstöra en bok!)

Okej, detta har varit vad jag har ockuperat min tid med det förflutna dagen (Ja, mer som den senaste timmen) men jag gjorde en handledning om hur man gör en osynlig bokhylla, utan att förstöra en bok (eftersom jag älskar mina böcker dyrt).Så först, j...

Några praktiska verktyget knep att spara dig att hitta de andra som...

i princip dessa är några praktiska knep att spara ska du i verktygslådan och whatnot, Im säker på att alla känner till minst en av dessa redan men några kanske inte så jag kommer lägga bort. Göra kurs om du vill, inte för att vinna saker men det är e...

Hur att förstärka ljudet av telefonen 3 sätt

Hej telefon varje en i dag jag kommer att berätta de tre sätt att förstärka ljudet av din smarta absolut för gratis. Njut!Steg 1: Första sättet Du behöver:1. en tom Toalettpappershållare2. två tomma plastkoppar3. en telefonSteg 2:Först skär hela på v...

Hur att förstärka dina iPhone högtalare... med dina händer!

jag lyssnade på en låt en dag på en iPhone och inte har några externa högtalare, så jag kom med denna metod att öka en iPhone högtalare, med bara händerna.Steg 1: grepp Starta genom att hålla iPhone såhär. Du kommer att märka att högtalarna har först...

Lär dig att använda kameran som ett proffs!

Så du är intresserad av fotografi? Toppen!Som det visar sig, kan någon ta ett fotografi - du bara peka och skjuta.Naturligtvis, är om du intresserad av gör det väl den vänder ute är lite mer att veta än att bara trycka på en knapp. Det finns goda nyh...

Oortodoxa airsoft taktik för att hjälpa dig att vinna kriget

detta instructable handlar om att hitta sätt att vinna kriget. Sätt ingen förväntar. Som sådan, är improvisation ett måste. Denna guide ger dig förslag på oortodoxa sätt att ge dig fördelar, men kommer också få du funderar på hur du kan improvisera d...

Lär dig att rita... Del ett

jag såg detta ämne i listan brännande frågor, så jag sa till mig själv, "Jag är konstnär, så jag bör hjälpa ya ska ut (förutom det faktum att jag vill ha ett pris!)" Det är vad jag hoppas att åstadkomma här. Det första ya måste du känna till är...

Lär dig att laga en hamburgare på grillen perfekt

Introduktion om Burgerou kan lära dig att laga en hamburgare på grillen genom att gå igenom denna artikel. Det finns många artiklar på detta recept för hur man lagar en hamburgare på grillen men den här är annorlunda än alla som du inte behöver veta...

2015 gym Guide: Lär dig att träna + förbättra din hälsa med 16 + års professionell vägledning!

Personlig träning är dyrt. Ännu människor fortfarande dra nytta av den personliga touch som en fitness expert erbjuder. Mitt mål med denna uppskrivning är att informera dig om att du har alternativ för DIY fitness utbildning. Jag älskar personliga tr...

6 sätt bakpulver kan hjälpa dig att få en dejt

Bakpulver har en massa användningsområden runt huset. Några av er kanske frågar dig själv "Hey Instructables, jag måste få en dejt. Hur kan jag göra det här genom att bara använda bakpulver?Här är 6 snabba tips för att få ett datum med hjälp av bakpu...

Lär dig att bygga en stationär dator eller PC

gillar bilar? Kolla in min nya hemsida! http://nukem384.blogspot.com/http://www.youtube.com/watch?v=9smMOm60gkULär dig att bygga din egen dator eller PC. Gör att du kan anpassa efter dina exakta behov! Ledsen att kvaliteten är lite skit.Delar...Coole...

Billboard att förstört jul

vi lever i ett historiskt kvarter med zonindelning restriktioner som förbjuder uppförande av skyltar och extremt stora skyltfönster tecken. För två år sedan var en av de äldre byggnaderna i våra affärsdistrikt fördömas och rivna. Byggnaden var förfal...

Lär dig att hacka en lök på ett enkelt sätt!

Jag har hugga lök i många år, och har provat massor av olika metoder. Detta är de sätt jag kommer att använda efter hackning hundratals (om inte tusentals!) lök samtidigt förbereda måltider för min familj. Vissa metoder har du skära mot din hand, som...

Laser som hjälper dig att läsa

Detta är ett påhitt som jag kom upp med att hjälpa dig att läsa eftersom jag alltid skulle förlora min plats vid läsning och det blev riktigt irriterande.Steg 1: steg ett: laser måste du få rätt typ av laser eftersom andra lasrar kommer inte att fung...

Sätt att förstöra ditt liv (eller göra det suger verkligen illa)

som vi alla vet (om du har bott under en sten för det gångna året), USA är mitt i det största ekonomiska s hålet sedan den stora depressionen. För många människor är varje dag en kamp att hålla sig flytande. Som ett resultat, kanske vissa av oss tyck...

Hur du lär dig att skriva rätt räckte

Allt jag gör är vänsterhänt. Från att skriva till bowling, kasta en baseball, äta, skjuter en pistol. Jag är helt nöjd med det förutom jag inte kan stå mitt hand skrivande. Det ser ut som 3-åring. .... Jag har hittat som använder ett gummiband för at...

Lär dig att sy: Att hitta The Grainline på The tyg

Sandra Betzina lär dig att känna igen stadkant kant och grainline av ett tyg. Att veta var grainline är kan vara det första steget i framgångsrika mönster placering.Steg 1: Uppmärksamma läsande vad tyget förslaget är på baksidan av mönstret.Steg 2: V...

Lär dig att rita jul Finn The Human från äventyr tid!

Lär dig att rita jul Finn The Human från äventyr tid! Det är kul och lätt att dra. Jag kommer också att visa hur man färga den i tid förflutit.I min kanal hittar du en mängd olika Hur Rita videor. De är oftast lätt att dra, men vissa av dem kan vara...