Funktion in C, aber wie?
Wer weiß wie eine Funktion lauten könnte, die den WWert zweier ganzahliger Variablen vertauscht?
Mit einfachen C skills?
4 Antworten
a ^= b;
b ^= a;
a ^= b;
Das dürfte so ziemlich das effizienteste sein. Ansonsten mit einer temporären Variable arbeiten.
int temp = a;
a = b;
b = temp;
Man kann natürlich auch Funktionen daraus machen.
void swap (int* a, int* b)
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
Oder in C++
void swap (int& a, int& b)
{
a ^= b;
b ^= a;
a ^= b;
}
Wenn du es anschaulicher haben willst, empfehle ich aber die Methode mit der temporären Variable.
void ist hier der Rückgabewert. Oft genug wird es Funktionen geben, die nichts zurückgeben, aber dennoch etwas machen. Zum Beispiel kann eine void Funktion ja etwas in der Konsole ausgeben. Hier in dem Fall übergeben wird Zeiger oder Referenzen von a und b. Das heißt also, wenn wir int* a oder int& a schreiben als Übergabewert, dann übergeben wir nicht eine Kopie von a, sondern in gewisser Hinsicht eine Speicheraddresse zu a. So arbeitet die Funktion also nicht mit einer Kopie von a, sonder mit a selbst, sozusagen. Wenn man das jetzt einfach mit int a ersetzen würde, dann würde die Funktion wirklich nichts machen
c = a
a = b
b = c
C Syntax anwenden.
Und sagen wir die Zahlen sind z.B. 21 und 43 wie mach ich es da, weil du 3 Variablen genommen hast, aber erstmal danke für die Antwort ;) ☘️
huch, jetzt war ich in der falschen Antwort, hier also noch mal:
Vielleicht einmal eine Basis-Erklärung.
Eine Variable ist wie ein Schächtelchen. Du kannst etwas hineingeben. WAS Du hineingibst, das sind die Zahlen. Stelle Dir also zwei kleine Zettel vor, auf einem steht 21, auf dem anderen 43.
Jetzt kannst Du eine Schachtel in die andere kippen. Doch nur so, dass der Inhalt dabei vernichtet wird. Würdest Du die 21-Schachtel in die 43 kippen, wäre der Zettel mit 43 zerstört.
Was also tun?
Genau, eine dritte Box nehmen. Du kippst Du 21-Box in die leere Box und hast Deinen 21er Zettel damit gesichert. Jetzt kippst Du die 43er in die 21er, weil er jetzt nicht mehr verloren ist. Danach kippst du die Sicherungsschachtel in die erste Schachtel, - dort ist dann 21 drin. Und damit ist es vertauscht.
Hole Dir doch mal 3 Schachteln und 2 Zettel und probiere es aus. Wichtigste Regel: Was in die Box hineingekippt wird, - zerstört den Inhalt, der davor drin war. Also nie zwei Zettel in eine Box.
Wofür nicht einfach eine eigene Funktion schreiben?
Name könnte sein: SwitchNumbers
Und: Eine Variable ist nicht ganzzahlig, sondern die Zahlen bzw. Werte ;)
a=1
b=2
c=0
SwitchNumbers(a,b,c)
{
c=a
a=b
b=c
}
Und sagen wir die Zahlen sind z.B. 21 und 43 wie mach ich es da, weil du 3 Variablen genommen hast, aber erstmal danke für die Antwort ;) ☘️
Das funktioniert nicht, danach sind beide Zahlen gleich a
Dann setz eben noch eine temporäre Variable ein, oder ändere die Variablennamen innerhalb der Funktion...
Vielleicht einmal eine Basis-Erklärung.
Eine Variable ist wie ein Schächtelchen. Du kannst etwas hineingeben. WAS Du hineingibst, das sind die Zahlen. Stelle Dir also zwei kleine Zettel vor, auf einem steht 21, auf dem anderen 43.
Jetzt kannst Du eine Schachtel in die andere kippen. Doch nur so, dass der Inhalt dabei vernichtet wird. Würdest Du die 21-Schachtel in die 43 kippen, wäre der Zettel mit 43 zerstört.
Was also tun?
Genau, eine dritte Box nehmen. Du kippst Du 21-Box in die leere Box und hast Deinen 21er Zettel damit gesichert. Jetzt kippst Du die 43er in die 21er, weil er jetzt nicht mehr verloren ist. Danach kippst du die Sicherungsschachtel in die erste Schachtel, - dort ist dann 21 drin. Und damit ist es vertauscht.
Hole Dir doch mal 3 Schachteln und 2 Zettel und probiere es aus. Wichtigste Regel: Was in die Box hineingekippt wird, - zerstört den Inhalt, der davor drin war. Also nie zwei Zettel in eine Box.
Wer weiß wie eine Funktion lauten könnte
Ich weiß es.
Und sagen wir die Zahlen sind z.B. 21 und 43 wie mach ich es da, weil du 3 Variablen genommen hast, aber erstmal danke für die Antwort ;)
Du bist ziemlich faul. Du benutzt weder deinen eigenen Denkapparat, noch änderst du die Kommentare ab, sondern einfach nur copy & paste.
Doch ich habe bei dir das Kleeblatt entfernt weil mir deine Antwort nicht gefallen hat ☘️
Den Faulen gefällt nie, wenn man sie darauf anspricht. Dein Kleeblatt ist mir völlig wurscht, hat keinerlei Wert für mich! :oP
Dein Name scheint aber nicht Programm zu sein?
Kannst du mir kurz erklären wann ich void benutzen muss und nicht int. Void ist ja irgendwie wenn nichts berechnet wird?