Funktion in C, aber wie?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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.


chudad 
Fragesteller
 08.11.2021, 16:51

Kannst du mir kurz erklären wann ich void benutzen muss und nicht int. Void ist ja irgendwie wenn nichts berechnet wird?

0
JeyKey55  08.11.2021, 18:29
@chudad

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

0
chudad 
Fragesteller
 08.11.2021, 18:47
@JeyKey55

Ah ok ist einleuchtend, danke

0

c = a

a = b

b = c

C Syntax anwenden.

Woher ich das weiß:Berufserfahrung – ich arbeite schon sehr lange im EDV Bereich, viele Sparten

chudad 
Fragesteller
 08.11.2021, 16:11

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 ;) ☘️

0
Mauritan  08.11.2021, 16:33
@chudad

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.

0
chudad 
Fragesteller
 08.11.2021, 16:40
@Mauritan

Das ist gut erklärt, vielen Dank für die ausführliche Antwort.

1

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
}
Woher ich das weiß:eigene Erfahrung – Logisch Nachdenken, dann Recherchieren, dann Kombinieren.

chudad 
Fragesteller
 08.11.2021, 16:12

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 ;) ☘️

0
PlacidCyanide  08.11.2021, 16:15
@chudad

a=21

b=43

c=0

c=a //c=21, a=21

a=b //a=43, b=43

b=c //b=21, c=21

0
GuteAntwort2021  08.11.2021, 16:15
@chudad

Ehm, genauso nur eben mit 2 Variablen.

a=21
b=43
SwitchNumbers(a,b) {
  b=a
  a=b
}
0
GuteAntwort2021  08.11.2021, 16:18
@JeyKey55

Dann setz eben noch eine temporäre Variable ein, oder ändere die Variablennamen innerhalb der Funktion...

0
Mauritan  08.11.2021, 16:31
@chudad

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.

0
Wer weiß wie eine Funktion lauten könnte

Ich weiß es.

Woher ich das weiß:Studium / Ausbildung – Masterstudium Elektrotechnik - Schwerpunkt Embedded Systems

chudad 
Fragesteller
 08.11.2021, 16:11

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 ;)

0
GuteAntwort2021  08.11.2021, 16:17
@chudad

Du bist ziemlich faul. Du benutzt weder deinen eigenen Denkapparat, noch änderst du die Kommentare ab, sondern einfach nur copy & paste.

1
chudad 
Fragesteller
 08.11.2021, 16:39
@GuteAntwort2021

Doch ich habe bei dir das Kleeblatt entfernt weil mir deine Antwort nicht gefallen hat ☘️

0
GuteAntwort2021  08.11.2021, 17:34
@chudad

Den Faulen gefällt nie, wenn man sie darauf anspricht. Dein Kleeblatt ist mir völlig wurscht, hat keinerlei Wert für mich! :oP

0