Funktionen und Parameterübergabe in C und C++
In dieser Lektion vergleichst du drei Arten, Parameter an eine Funktion zu übergeben: als Wert, als Zeiger und als Referenz.
Einführung
Übergibt man eine Variable an eine Funktion, legen C und C++ standardmäßig eine Kopie davon an, Änderungen in der Funktion wirken sich also nicht auf die ursprüngliche Variable aus. Soll die Funktion das Original ändern dürfen, muss die aufrufende Stelle das ausdrücklich erlauben, in C mit einem Zeiger, in C++ mit einer Referenz.
Wichtige Punkte
- Schalte die Compiler-Warnungen (compiler warnings) ein und behebe alle.
- Verstehe den Datentyp und die Lebensdauer (lifetime) jedes Werts genau.
- Prüfe immer die Eingabedaten und die Grenzen von Array-Indizes.
Codebeispiele in C und C++
#include <stdio.h>
void swap_ints(int *left, int *right) {
int temporary = *left;
*left = *right;
*right = temporary;
}
int main(void) {
int a = 4, b = 9;
swap_ints(&a, &b);
printf("%d %d\n", a, b);
return 0;
}
9 4
#include <iostream>
void swap_ints(int& left, int& right) {
int temporary = left;
left = right;
right = temporary;
}
int main() {
int a = 4, b = 9;
swap_ints(a, b);
std::cout << a << ' ' << b << '\n';
}
9 4
C und C++ im Vergleich
In C erhält die Funktion swap_ints die Adressen der beiden Variablen und greift mit dem Operator * darauf zu, um ihre Werte zu tauschen. In C++ wirkt eine Referenz (reference) wie ein zweiter Name für die ursprüngliche Variable, die Schreibweise ist kürzer und ändert trotzdem den Wert. Das Schlüsselwort const an einem Parameter zeigt, dass die Funktion die Daten nur liest und nicht ändert.
C verwendet kleine prozedurale Funktionen und zeigt offen, wie Daten im Speicher dargestellt werden.
C++ erlaubt weiterhin Arbeit auf niedriger Ebene, ergänzt aber Bibliothekstypen und sicherere Abstraktionen.
Übungen zur Vertiefung
Führe beide Versionen aus und ändere dann den Code, um zu beobachten, welche Sicherheit jede Sprache bietet.
- Teste ungültige Eingaben und Grenzwerte.
- Kompiliere mit den Flags -Wall -Wextra -Wpedantic, um zusätzliche Warnungen einzuschalten.
- Lagere gemeinsame Deklarationen in eine Header-Datei und die Implementierung in eine eigene Datei aus.
Mit einer Challenge üben
Nutze den Inhalt dieser Lektion, um ein echtes Problem zu lösen. Jede Challenge läuft im Browser, mit sofortigen Tests und einem KI-Review.
- Distance Between Points Compute the straight-line distance between two points. Einfach
- Days in a Month Return how many days a month has, including leap years. Einfach