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