zeiger als parameter



  • #include <stdio.h>

    int a, b, c;

    int f(int *b){
    c = *b+10;
    *b = 2;
    return (*b+c);
    }

    int main(void){
    int *q = &a;
    a=b=c=10;
    printf("a: %d, b: %d, c: %d, *q: %d, f(q): %d", a, b, c, *q, f(q));
    getc(stdin);
    }

    warum ist die ausgabe für a hier 2 und für *q auch 2?...warum sind a und *q nicht 10?
    wie gehe ich hier vor?

    danke für eure hilfe!!!
    gruss
    dc



  • f(q) setzt den wert von a auf 2. und da bei funktionsaufrufen in c die auswertung der argumente von rechts nach links geschieht, wird erst f() aufgerufen bevor die argumente a,b,c und *q auf den stack kommen. deshalb bekommt printf() fur a und *q den wert 2.



  • hallo konfusius,

    vielen dank für deine promte antwort!!!
    habe mich heute morgen tierisch gefreut... und verstehe jetzt!

    viele grüsse
    dc


Anmelden zum Antworten