C Pointers

Pointers zijn krachtige kenmerken van C en C ++ programmeren. Voordat we pointers leren, leren we eerst over adressen in C-programmering.

Adres in C

Als je een variabele var in je programma hebt, &var geeft je zijn adres in het geheugen.

We hebben het adres meerdere keren gebruikt tijdens het gebruik van de functie scanf().

Hier wordt de waarde die de gebruiker invoert opgeslagen in het adres van de variabele var. Laten we een werkend voorbeeld nemen.

Uitvoer

var: 5 address of var: 2686778

Opmerking: u krijgt waarschijnlijk een ander adres als u de bovenstaande code uitvoert.

C Pointers

Pointers (pointervariabelen) zijn speciale variabelen die worden gebruikt om adressen op te slaan in plaats van waarden.

Pointer-syntaxis

Hier is hoe we pointers kunnen declareren.

Hier hebben we een pointer p van int type gedeclareerd.

Jij kan ook op deze manieren verwijzingen declareren.

Laten we nog een voorbeeld nemen van het declareren van pointers.

Hier hebben we een pointer p1 en een normale variabele p2 gedeclareerd.

Adressen toewijzen aan Pointers

Laten we een voorbeeld nemen.

Hier wordt 5 toegewezen aan de variabele c. En het adres van c wordt toegewezen aan de pc-pointer.

Get Value of Thing Pointed by Pointers

Om de waarde te krijgen van het ding dat door de pointers wordt aangegeven, gebruiken we de * operator. Bijvoorbeeld:

Hier wordt het adres van c toegewezen aan de pc-aanwijzer. Om de waarde opgeslagen in dat adres te krijgen, gebruikten we * pc.

Opmerking: in het bovenstaande voorbeeld is pc een pointer, niet *pc. Je kunt en mag zoiets niet doen als *pc = &c;

Overigens wordt * de dereferentie-operator genoemd ( bij het werken met pointers). Het werkt op een pointer en geeft de waarde die in die pointer is opgeslagen.

Waarde wijzigen met aanwijzers

Laten we een voorbeeld nemen.

We hebben het adres van c toegewezen aan de pc-pointer.

Vervolgens hebben we de waarde van c gewijzigd in 1. Aangezien pc en het adres van c hetzelfde is, *pc geeft ons 1.

Laten we een ander voorbeeld nemen.

We hebben het adres van c aan de pc-pointer toegewezen.

Vervolgens hebben we *pc gewijzigd in 1 met *pc = 1;. Aangezien pc en het adres van c hetzelfde zijn, is c gelijk aan 1.

Laten we nog een voorbeeld nemen.

Aanvankelijk het adres van c wordt aan de pc-pointer toegewezen met pc = &c;. Aangezien c 5 is, geeft *pc ons 5.

Vervolgens wordt het adres van d toegewezen aan de pc-pointer met pc = &d;. Aangezien d -15 is, geeft *pc ons -15 .

Voorbeeld: werken met pointers

Laten we een werkend voorbeeld nemen.

Uitvoer

Address of c: 2686784Value of c: 22Address of pointer pc: 2686784Content of pointer pc: 22Address of pointer pc: 2686784Content of pointer pc: 11Address of c: 2686784Value of c: 2

Uitleg van het programma

  1. int* pc, c;

    Hier wordt een pointer pc en een normale variabele c, beide van het type int, gemaakt.
    Aangezien pc en c aanvankelijk niet zijn geïnitialiseerd, wijst pointer pc naar geen adres of een willekeurig adres. En variabele c heeft een adres maar bevat een willekeurige garbage-waarde.
  2. c = 22;

    Dit wijst 22 toe aan de variabele c. Dat wil zeggen, 22 wordt opgeslagen in de geheugenlocatie van variabele c.
  3. pc = &c;

    Dit wijst het adres van variabele c toe aan de pointer-pc.
  4. c = 11;

    Dit wijst 11 toe aan variabele c.
  5. *pc = 2;

    Dit verandert de waarde op de geheugenlocatie die door de pointer pc wordt aangegeven in 2.

Veelgemaakte fouten bij het werken met pointers

Stel dat je wilt dat pointer pc wijs naar het adres van c. Dan,

Hier is een voorbeeld van pointer-syntaxis die beginners vaak verwarrend vinden.

Waarom kregen we geen foutmelding als met int *p = &c;?

Het is omdat

gelijk is aan

In beide gevallen maken we een pointer p (niet *p) en &c eraan toewijzen.

Om deze verwarring te voorkomen, kunnen we de verklaring als volgt gebruiken:

Nu je weet wat aanwijzingen zijn, zul je leren hoe pointers hebben betrekking op arrays in de volgende tutorial.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *