Verständnisfrage Code Analyse

dpaulo

Newbie
Registriert
Feb. 2019
Beiträge
4
Moin Leute,

sitz seit einiger Zeit über einer Aufgabe aus einer Musterklausur und ich versteh nicht ganz warum a und b die Werte annehmen, die sie annehmen. Hoffentlich kann einer von euch mir weiterhelfen.

Das Programm ist in C geschrieben und der Code sieht folgendermaßen aus:

Code:
int counter = 10;

void zeigerTest(int *pa, int *pb)
{
    *pa = *pb+5;
    *pb = counter;

    counter+=10;
}

void zeigerSwap(int *pa, int *pb)
{
    int a;
    int *tmp = &a;

    *tmp = *pa;
    *pa = *pb;
    *pb = *tmp;

    *pa = counter++;
    *pb = counter++;
}

int main(int argc, char *argv[])
{
    int a = 5;
    int b = 5;

    printf("a=%d, b=%d\n",a,b);

    zeigerTest(&a,&b);
    printf("a=%d, b=%d\n",a,b);

    zeigerTest(&a, &a);
    printf("a=%d, b=%d\n",a,b);

    zeigerTest(&b,&b);
    printf("a=%d, b=%d\n",a,b);

    zeigerSwap(&a, &b);
    printf("a=%d, b=%d\n",a,b);
}

Beim ersten print Statement ist es klar, bei zweiten auch noch, aber dann kapier ich die Logik dahinter überhaupt nicht mehr. Hat jemand von euch eine Idee? Wäre über Hilfe sehr dankbar.
 
Zuletzt bearbeitet:
Pack mal deinen Code in [CODE][/CODE] Tabs. Dann kann man ihn besser Lesen und direkt auf Zeilen verweisen.

Sonst: Du übergibst ja Zeiger. Wenn du also zeigerTest(&a, &a); ausführst ist *pa das gleiche wie *pb, nämlich beides mal a
 
  • Gefällt mir
Reaktionen: BeBur
ok ich habs mal formatiert. Danke schonmal für die Antwort.

Nilson schrieb:
Wenn du also zeigerTest(&a, &a); ausführst ist *pa das gleiche wie *pb, nämlich beides mal a

ja den Gedanken hatte ich auch schon aber ich versteh nicht warum in zeile 35 dann a=20 ist.
 
counter ist ja eine globale Variable. Wenn du zeigerTest() das erste mal in Zeile 31 aufrufst setzt du counter auf 20 (Zeile 8). Wenn du zeigerTest() das zweite mal in Zeile 34 aufrufst setzt du *pb (also a) auf dern Wert von counter (Zeile 6).
 
also heißt dass, wenn ich zeigerTest in zeile 34 nochmal aufrufe, a als erstes den Wert 15 in Zeile 5 bekommt, aber wegen Zeile 6 dann auf den Wert 20 gesetzt wird?
 
Jop
 
Zurück
Oben