Dreiecksvertauschen - Typumwandlung
-
main () { int a,b, *z1, *z2, *zw; z1 = &a; z2 = &b; printf("z1 = %d z2 = %d", *z1, *z2); zw = z1; z1 = z2; z2 = zw; printf("\n\nz1 = %d z2 = %d", *z1, *z2); getch(); }
OK, das habe ich "überlesen" mit dem Inhalt. Habe ich nun abgeändert, war ja blos ein sternchen
Aber bei der Musterlösung mit der Typumwandlung, (char*) was hat dieses * darin zusuchen? Hat das wieder mit dem Inhalt zutuen oder nur mit der Typumwandlung?
Gruß juniorcrew
-
LordJaxom schrieb:
Grundsätzlich richtig, aber warum sollte er das tun, wenn er in diesem Fall gleichzeitig eine fast richtige Lösung präsentiert?
das wüßt ich auch gern
aber richtig ist sie nicht, denn auch wenn nicht def. wird ein pointer normal mit
int *p; printf("%p",p);
geplottet und falls das aus irgendeinem grund nicht klappen sollte gibt man zeiger nicht als "%d" sondern als "%x" aus...
darüber hinaus ist nicht von einem tausch über einen 3. zeiger die rede...
also ist die lösung afik. nicht richtig und damit auch keine "muster-lösung" denn die stehen idr. für 100% getestete richtige aufgaben, erstellt von leuten die das schon ne ganze zeit lang machen da sie sonst nicht unterrichten dürften
lg lolo
-
noobLolo schrieb:
"muster-lösung" denn die stehen idr. für 100% getestete richtige aufgaben
nobodys perfect
-
Musterlösung:
char a, b, *c, *d, *e; c = &a; d = &b; printf(“%d %d“,(char *)c,(char *)d); e = c; c = d; d = e; printf(“%d %d“,(char *)c, (char *)d);
Das ist die uns zur Verfügung gestellt Musterlösung. Das andere war meie Lösung der Aufgabe. Da habe ich nie behauptet das die richtig ist. Das war ja gerade meine Frage. Da meine Lösung nicht mit der Musterlösung übereinstimmte... Die Musterlösung ist von unserem Prof..
Also wie ist es denn nun richtig?
Musterlösung? Nur wozu ist darin die Typumwandlung da? Da wird doch nr mit char-Variablen gearbeitet.Na klar sollt ihr mir helfen
-
das ist und bleibt falsch
char a, b, *c, *d; c = &a; d = &b; //entweder printf("%p %p\n",(void *)c,(void *)d); if(c!=d){ c^=d; d^=c; c^=d; } //oder printf("0x%x 0x%x\n",(unsigned)c, (unsigned)d);
so evtl.?
lg lolo
-
-
Oki, danke habe ich nucn auch verstanden!
main () { int a,b, *z1, *z2, *zw; z1 = &a; z2 = &b; printf("z1 = %d z2 = %d", *z1, *z2); zw = z1; z1 = z2; z2 = zw; printf("\n\nz1 = %d z2 = %d", *z1, *z2); getch(); }
Also könnte man das hier so stehen lassen? So ein Überprüfung wie du vorhin sagtest, brauchen wir darin nicht, weil wir dasn och garnicht hatten. UNd eine Typumwandlung macht hierbei ja auch keinen Sinn meineserachtens.
Danke für Deine/Eure Hilfe!
Gruß juniorcrew
-
Selbsverständlich!
Compiler: Default compiler
Executing gcc.exe...
gcc.exe "D:\Untitled2.c" -o "D:\Untitled2.exe" -g3 -I"C:\Dev-Cpp\include" -L"C:\Dev-Cpp\lib" -g3
Execution terminated
Compilation successful
-
ja bis auf den tausch über *zw
also gehen wir die aufgabe doch mal langsam durch...
Aufgabenstellung schrieb:
Deklarieren Sie hierzu zwei Integer Variablen und zwei Zeiger auf diese Integervariablen.
int x=0xa; int y=0xb; int *px=&x; int *py=&y;
Aufgabenstellung schrieb:
Geben Sie den Inhalt der von den Zeigern adressierten Speicherstellen aus.
printf("%d %d",*px,*py);
Aufgabenstellung schrieb:
Vertauschen Sie dann den Inhalt der beiden Zeiger (d.h. die Adressen, die in den Zeigern gespeichert sind).
if(px!=py){ px^=py; py^=px; px^=py; }
Aufgabenstellung schrieb:
Geben Sie nun nochmals den Inhalt der von den Zeigern adressierten Speicherstellen aus.
printf("%d %d",*px,*py);
lg lolo
-
Also wir haben das über diesen dritten Zwischen-Zeiger mal gelernt, also es wurde mal erwähnt.
Deine Methode verstehe ich garnicht! Die Bedingung in der IF-Schleife ist noch logisch für mich, aber dieses px^=... Was bedeutet das?
-
evtl. war die aufgabe genau darauf abgezielt, heraus zu finden wie man 2 vars ohne eine 3. tauschen kann wenn sie einfach nicht verfügbar ist (aus welchen gründen auch immer, sei es nur, weil nicht in der aufgabenstellung vorgesehen)
http://en.wikipedia.org/wiki/XOR_swap_algorithm
-
juniorcrew schrieb:
IF-Schleife
der klassiker