2 svar
84 visningar
Didar 208
Postad: 2 nov 2022 13:39

förklaring av kod (pekare)

Hej! jag har denna kod som jag försöker förstå men förstår inte ;/ kan någon vara snäll och förklara vad som händer steg för steg?

 

#include <stdio.h>

int main()

    int num1 = 5, num2, *pA, *pB;

    pA = &num1;

    *pA = num1 + *pA;

    pB = pA;

    pA = &num2;

    num2 = *pB *num1;

    printf("%d, %d", *pA, *pB);

 

    return 0;

}

Yngve 40278 – Livehjälpare
Postad: 2 nov 2022 17:33 Redigerad: 2 nov 2022 18:33
Didar skrev:

#include <stdio.h>

int main()

    int num1 = 5, num2, *pA, *pB;

4 variabler deklareras:

  1. num1 är ett heltal som initieras till 5, dvs num1 får värdet 5.
  2. num2 är ett heltal som inte initieras
  3. pA är en pekare till ett heltal.
  4. pB är en pekare till ett heltal.

    pA = &num1;

Pekaren pA sätts till adressen av variabeln num1, dvs pA sätts att peka på den plats i minnet där innehållet i variabeln num1 lagras.

    *pA = num1 + *pA;

Det som pA pekar på sätts till värdet av num1 plus innehållet i den plats i minnet som pA pekar på. I det här fallet ändras innehållet från 5 till 5+5, dvs 10.

    pB = pA;

Pekaren pB sätts till att peka på samma plats i minnet som pA pekar på, dvs pB sätts att peka på den plats i minnet där innehållet i variabeln num1 lagras.

    pA = &num2;

Pekaren pA sätts till adressen av variabeln num2, dvs pA sätts att peka på den plats i minnet där innehållet i variabeln num2 lagras.

    num2 = *pB *num1;

Innehållet i variabeln num2 sätts till produkten av innehållet i den plats i minnet som pB pekar på och innehållet i num1. I det här fallet sätts innehållet i num2 till 10•10, dvs 100.

    printf("%d, %d", *pA, *pB);

Utskrift sker. Det som skrivs ut är

  1. innehållet i den plats i minnet som pA pekar på, tolkat som ett heltal.
  2. ett kommatecken
  3. ett blanksteg
  4. innehållet i den plats i minnet som pA pekar på, tolkat som ett heltal.

    return 0;

Programmet returnerar heltalet 0.

}

Didar 208
Postad: 2 nov 2022 18:21
Yngve skrev:
Didar skrev:

#include <stdio.h>

int main()

    int num1 = 5, num2, *pA, *pB;

4 variabler deklareras:

  1. num1 är ett heltal som initieras till 5, dvs num1 får värdet 5.
  2. num2 är ett heltal som inte initieras
  3. pA är en pekare till ett heltal.
  4. pB är en pekare till ett heltal.

    pA = &num1;

Pekaren pA sätts till adressen av variabeln num1, dvs pA sätts att peka på den plats i minnet där innehållet i variabeln num1 lagras.

    *pA = num1 + *pA;

Det som pA pekar på sätts till värdet av num1 plus innehållet i den plats i minnet som pA pekar på. I det här fallet ändras innehållet från 5 till 5+5, dvs 10.

    pB = pA;

Pekaren pB sätts till att peka på samma plats i minnet som pA pekar på, dvs pB sätts att peka på den plats i minnet där innehållet i variabeln num1 lagras.

    pA = &num2;

Pekaren pA sätts till adressen av variabeln num2, dvs pA sätts att peka på den plats i minnet där innehållet i variabeln num2 lagras.

    num2 = *pB *num1;

Innehållet i variabeln num2 sätts till produkten av innehållet i den plats i minnet som pB pekar på och innehållet i num1. I det här fallet sätts innehållet i num2 till 10•10, dvs 100.

    printf("%d, %d", *pA, *pB);

Utskrift sker. Det som skrivs ut är

  1. innehållet i den plats i minnet som pA pekar på, tolkat som ett heltal.
  2. ett kommatecken
  3. ett blanksteg
  1. nnehållet i den plats i minnet som pA pekar på, tolkat som ett heltal.

    return 0;

Programmet returnerar heltalet 0.

}

tack för en bra förklaring Yngve!

Svara
Close