Leer te begrijpen C++ Pointers (4 / 6 stap)

Stap 4: Gebruik van Pointers

PASSEREN ARGUMENTEN VOOR EEN FUNCTIE

Er zijn twee manieren om het doorgeven van argumenten aan een functie: door waarde of aan de hand.

PASSEREN ARGUMENTEN DOOR WAARDE

Normaal gesproken zijn argumenten doorgegeven aan functies door waarde, wat betekent dat het de waarde van de variabele die wordt doorgegeven aan de functie en niet de variabele zelf.

De gevolgen hiervan duidelijk geworden in het volgende codefragment:

VOID fn (int nArg1, int nArg2)
{
Wijzig de waarden van de argumenten
nArg1 = 10;
nArg2 = 20;
}

int main (int nNumberofArgs, char * pszArgs [])
{
initiaize twee variabelen en hun waarden weergeven
int nValue1 = 1;
int nValue2 = 2;

nu proberen en deze wel wijzigen met het aanroepen van een functie

FN (nValue1, nValue2);

Wat is de waarde van nValue1 en nValue2 nu?
Cout cout
systeem ("pauze")
keren 0;

}

Dit programma verklaart twee variabelen, nValue1 en nValue2, ze aan een bekende waarde initialiseert en hun waarden wordt de doorgegeven aan een functie fn (). Deze functie wijzigt de waarde van de argumenten en gewoon als resultaat gegeven.

Vraag: Wat is de waarde van nValue1 en nValue2 in main () na controle geeft als van (fn resultaat)?

Antwoord: De waarde van nValue1 en nValue2 blijven onveranderd op 1 en 2, respectievelijk.

Om te begrijpen waarom, zorgvuldig bestuderen hoe C++ omgaat met geheugen in de oproep tot (fn). C++ worden lokale variabelen (zoals nValue1 en nValue2) opgeslagen in een speciaal gebied van geheugen, bekend als de stack. Bij binnenkomst in een functie, C++ cijfers uit hoe veel geheugen stapel de functie zullen vereisen en behoudt dan dat bedrag. Zeggen, omwille van het argument, dat in dit voorbeeld wordt het geheugen van de stapel gesneden uit voor main () op locatie 0x1000 start en strekt zich uit tot 0x101F. In dit geval nValue1 mogelijk op locatie 0x1000 en nValue2 misschien wel op locatie 0x1004.

(OPMERKING: ALS U CODE::BLOCKS GEBRUIKT, EEN INT IS 4 BYTES LANG.)

Als onderdeel van het bellen naar (fn), slaat C++ eerst de waarden van elk argument in de stack, beginnend bij de meest rechtse argument en zijn weg naar de links werken.

Het laatste wat C++ worden opgeslagen als onderdeel van de bellen het retouradres is zodat de functie waar om terug te keren weet nadat dit voltooid is.

Om redenen die meer moeten doen met de interne werking van de CPU, de stack "groeit naar beneden", wat betekent dat het geheugengebruik door fn () zal hebben adressen kleiner dan 0x1000.

Vergeet niet dat dit gewoon een mogelijke lay-out van het geheugen is. Ik niet weet (of zorg) dat deze in feite de werkelijke adressen door C++ in deze of een andere functie-aanroep gebruikt beschikbaar zijn.

De functie fn (int, int) bevat twee verklaringen:

nArg1 = 10;
nArg2 = 20;

Het belangrijkste punt om te zeggen dit is om aan te tonen van het feit dat het veranderen de waarden van nArg1 en nArg2 geen invloed op de oorspronkelijke variabelen terug op nValue1 en nValue2 heeft.

PASSEREN ARGUMENTEN DOOR VERWIJZING

Dus wat als ik wilde de wijzigingen permanent door fn ()? Ik kan dit doen door niet de waarde van de variabelen, maar hun adres doorgeven. Dit blijkt uit het volgende stukje code:

VOID fn (int * pnArg1, int * pnArg2)
{
Wijzig de waarde van de argumenten
* pnArg1 = 10;
* pnArg2 = 20;
}

int main (int nNumberofArgs, char * pszArgs [])
{
initialiseren van de twee variabelen en hun waarden weergeven
int nValue1 = 1;
int nValue2 = 2;

FN (nValue1, & nValue2);

systeem ("pauze")
keren 0;
}

Let ten eerste dat de argumenten bij de (fn) zijn nu verklaard niet gehele getallen maar pointers naar gehele getallen. De aanroep van fn (int *, int *) geeft niet de waarde van de variabelen nValue1 en nValue2 maar theie adressen.

Met behulp van de pointers, de wijzigingen in de twee variabelen permanent geworden. Zonder gebruik te maken van de pointers, zijn de wijzigingen alleen aangebracht in de waarden gekopieerd naar (fn).

Gerelateerde Artikelen

RC Power wielen voor een gehandicapt kind

RC Power wielen voor een gehandicapt kind

Ontmoet Oliver en zijn macht wielen jeep. Oliver is de kleinzoon van een goede vriend van mij. Oliver heeft hersenverlamming, maar laat hem gek je niet, hij houdt om te rijden rond in een voertuig van macht wielen net als elke andere jongen. Oliver h
Hoe lees ik .aiff bestanden met behulp van C

Hoe lees ik .aiff bestanden met behulp van C

het doel van deze instructies is om u te tonen hoe lees ik een .aiff-geluidsbestand. Net als alle andere binaire bestanden, .aiff bestand is ook bestaat uit verschillende geheugen brokken. Deze tutorial zal lezen via de gemeenschappelijke Brok van he
Leer en bouwen van een race spec drone

Leer en bouwen van een race spec drone

Vandaag, ik ga je leren hoe te vliegen en bouwen een drone "multi rotor" in ons geval een Quadcopter. In deze tutorial, ik zal u begeleiden door middel van de regels en voorschriften van een drone vliegen, dan ik zal beginnen met het begeleiden
Hoe boost IQ + leer iets met 50.000 pagina's van stimulerende boeken!

Hoe boost IQ + leer iets met 50.000 pagina's van stimulerende boeken!

Hoe mensen slimmer?-Door te leren!-Degenen die zich beter richten op zelf-onderwijs en leren hebben de potentie om autodidact genieën zoals Leonardo da Vinci en Einstein!Dit instructable toont je hoe lezing versterkt van uw intelligentie en verbetert
Houten zwaarden en How I Learned to Love leer-werk

Houten zwaarden en How I Learned to Love leer-werk

Mijn 6 jaar oude neefje heeft al in de omgeving van 10 maanden op mijn geval te bouwen hem een houten zwaard. Hoewel ik zie hem alleen om de paar maanden, elk gesprek begint en eindigt met, "Hoe zijn mijn houten zwaarden coming along?" Ik heb ei
Hoe lees ik een schuifmaat (caliper)

Hoe lees ik een schuifmaat (caliper)

kijken naar een vroege remklauw, zult u merken dat het nogal ziet als een tomahawk eruit en een schaal langs de lange zijde heeft. Meer over de schaal later. Op de bodem verlaten, het "blad van de bijl" zijn de kaken van de remklauw voor het met
Hoe ontwerp, Print en gebruik 3D gedrukte leer stempels!

Hoe ontwerp, Print en gebruik 3D gedrukte leer stempels!

Tooling leder en produceren prachtige en ingewikkelde patronen met de hand kunnen zeer uitdagend zijn. Hebben gedaand nu verschillende leer projecten, ik heb veel geleerd over het werken met leer, en als zodanig ben ik altijd op zoek naar nieuwe en b
Procedure: Leer gebonden dagboek

Procedure: Leer gebonden dagboek

De inspiratie voor dit project kwam uit de enorme verspilling van papier op mijn kantoor. Er zijn bepaalde processen ons systeem door die resulteren gaat in afdrukken uit stukjes papier met slechts een kleine hoeveelheid overbodige tekst aan de boven
3-in-1 leer Dr. Whoo uil met bril masker

3-in-1 leer Dr. Whoo uil met bril masker

Genoemd door mijn vriend Christine tijdens een 'Naam This Mask' poll op Facebook, Dr. Whoo is een leuke, veelzijdige masker/bril combo die je kunt dragen verschillende manieren en weergeven als kunst wanneer niet anders in gebruik.Stap 1: Let's Get S
Leer hoe te maken een OS

Leer hoe te maken een OS

een OS (werkend systeem) is het fundament van elke computer. Het bevat alle programma's en bestanden die nodig zijn voor de computer te laten functioneren. Besturingssystemen zijn gemaakt van honderdduizenden regels code en meestal is geprogrammeerd
Hoe te maken van een leer dagboek of Notebook gebonden

Hoe te maken van een leer dagboek of Notebook gebonden

Leren om te maken een leer gebonden dagboek of notebook uit een oude leren jas en een goedkope laptop.Stap 1: Versterking van de covers van laptopGrootte kartonnen in stukken gehakt te versterken van covers van uw laptop. Gebruik hete lijmpistool toe
Leer nieuwe Testament Grieks

Leer nieuwe Testament Grieks

een mogelijkheid om te gebruiken het Grieks van het nieuwe Testament is een grote hulp bij het bestuderen van de Bijbel. De meeste predikanten zijn verplicht om te studeren het Koine' Grieks common tijdens de eerste eeuw toen het nieuwe Testament wer
Leer het alfabet terug in 5 minuten

Leer het alfabet terug in 5 minuten

In dit instructable ik leer je verschillende manieren om te leren het alfabet makkelijk achteruit in slechts 5 minuten met behulp van gemakkelijk geheugen trucs.Het is mogelijk voor een weddenschap, voor indruk op je vrienden, of passeren een soberhe
Begrijpen hoe ben radio's werken.

Begrijpen hoe ben radio's werken.

Als u een beeld hebben van hoe AM radiowerk dan u een basiskennis hebben van hoe radio en zelfs TV werkt.In een poging om alle dit begrijpelijk is voor de beginnende enkele van de uitleg kan worden gesimplificeerd.Voor nu net Lees dit volgende deel e