Aufgabe mit Zeigern



  • Hallo,

    ich habe folgende Aufgabe zu lösen und verstehe insbesondere die "doppelten" Zeiger (**) nicht wirklich.

    Kann mir jemand helfen? Die prints müssen jeweils angegeben werden.

    Meine Lösung für das erste printf: 11 66 42 23 5
    Ist das richtig? Wie löse ich die zweite Teilaufgabe (2. printf)?

    Für Hilfe wäre ich wirklich dankbar!

    Viele Grüße

    michel

    int main (int argc, char* argv[]) {
    int* dr, *ds;
    int** drr, *dss;
    int i;
    int aa[5];
    for (i=0, i<5, i++) *(aa+i) = 123;
    
    dr = &aa[3];
    ds = dr-3;
    drr=&dr;
    dss=&ds;
    *dr=23;
    *ds=11;
    *(dr+1) = 5;
    ds += 1;
    *ds = 66;
    aa[2] = 42;
    
    printf („%d  %d %d %d %d \n“, a[0], a[1], a[2], a[3], a[4])
    
    aa[0] = *(aa + 2) - *(aa + 1);
    *(*drr – 1) = 7;
    *(*dss + 3)  = 4;
    **dss = **drr + *(*drr – 2);
    
    printf („%d  %d %d %d %d \n“, a[0], a[1], a[2], a[3], a[4])
    


  • Dieser Thread wurde von Moderator/in Dravere aus dem Forum C# und .NET in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Bis auf die vielen Syntaxfehler stimmt deine erste Antwort. Die zweite Folge ist -24 89 7 23 4

    Hier mal mit einfacher Erläuterung:

    dr = &aa[3]; 	//&aa[3]
    ds = dr-3;	//&aa[0]
    drr=&dr;	//&&aa[3]
    dss=&ds;	//&&aa[0]
    *dr=23;		//aa[3]= 23
    *ds=11;		//aa[0] = 11
    *(dr+1) = 5;	//aa[4] = 5
    ds += 1;	//aa[1] (ändert damit auch dss!!)
    *ds = 66;	//aa[1] = 66
    aa[2] = 42; 	//aa[2] = 42
    
    //a[0] = 11 a[1] = 66 a[2] = 42 a[3] = 23 a[4] = 5
    
    aa[0] = *(aa + 2) - *(aa + 1);	//aa[0] = aa[2] - aa[1] = 42 - 66 = -24
    *(*drr – 1) = 7;		//aa[2] = 7
    *(*dss + 3)  = 4;		//aa[4] = 4
    **dss = **drr + *(*drr – 2); 	//aa[1] = aa[3] + aa[1] = 23 + 66 = 89
    
    //a[0] = -24 a[1] = 89 a[2] = 7 a[3] = 23 a[4] = 4
    

Anmelden zum Antworten