Arrays an Funktionen in C übergeben: 1D & 2D – Praxisleitfaden
Arrays an Funktionen in C übergeben: 1D & 2D
Dieses Tutorial erklärt, wie man ganze Arrays – sowohl eindimensionale als auch mehrdimensionale – an Funktionen in C übergibt, mit klaren Code-Beispielen und Best-Practice-Tipps.
In C zerfällt ein Arrayname beim Übergeben an eine Funktion zu einem Zeiger, sodass die Funktion auf die Originaldaten zugreifen kann, ohne diese zu kopieren. Das Verständnis dieses Verhaltens ist essenziell für effizienten, wartbaren Code.
Einzelne Array-Elemente übergeben
Das Übergeben eines einzelnen Elements entspricht dem Übergeben jedes primitiven Typs.
Beispiel 1: Einzelne Array-Elemente übergeben
#include <stdio.h>
void display(int age1, int age2) {
printf("%d\n", age1);
printf("%d\n", age2);
}
int main() {
int ageArray[] = {2, 8, 4, 12};
// Zweites und drittes Element an display() übergeben
display(ageArray[1], ageArray[2]);
return 0;
}
Ausgabe
8 4
Hier übergeben wir ageArray[1] und ageArray[2] wie gewöhnliche Variablen. Die Funktion empfängt sie als Wert, sodass das Original-Array unverändert bleibt.
Ganze eindimensionale Arrays übergeben
Um ein ganzes Array an eine Funktion zu übergeben, genügt der Arrayname. Der Funktionsprototyp muss einen Array-Parameter anzeigen, die tatsächliche Größe kann jedoch weggelassen werden. Der Compiler behandelt den Parameter als Zeiger auf das erste Element.
Beispiel 2: Summe eines Arrays berechnen
#include <stdio.h>
float calculateSum(float num[]);
int main() {
float result, num[] = {23.4, 55, 22.6, 3, 40.5, 18};
// Ganzes Array an calculateSum() übergeben
result = calculateSum(num);
printf("Result = %.2f", result);
return 0;
}
float calculateSum(float num[]) {
float sum = 0.0;
for (int i = 0; i < 6; ++i) {
sum += num[i];
}
return sum;
}
Ausgabe
Result = 162.50
Die Funktionssignatur float calculateSum(float num[]) teilt dem Compiler mit, dass num ein Zeiger auf ein Float-Array ist. Die Schleife verarbeitet das Array an Ort und Stelle ohne Kopieren.
Mehrdimensionale Arrays übergeben
Mehrdimensionale Arrays folgen demselben Prinzip: Der Arrayname zerfällt zu einem Zeiger auf die erste Zeile. Der Compiler muss jedoch die Größe jeder Dimension außer der ersten kennen. Dies ist erforderlich, damit er die korrekten Speicheroffsets berechnen kann.
Beispiel 3: Zweidimensionales Array übergeben
#include <stdio.h>
void displayNumbers(int num[2][2]);
int main() {
int num[2][2];
printf("Enter 4 numbers:\n");
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 2; ++j) {
scanf("%d", &num[i][j]);
}
}
// Zweidimensionales Array an Funktion übergeben
displayNumbers(num);
return 0;
}
void displayNumbers(int num[2][2]) {
printf("Displaying:\n");
for (int i = 0; i < 2; ++i) {
for (int j = 0; j < 2; ++j) {
printf("%d\n", num[i][j]);
}
}
}
Ausgabe
Enter 4 numbers: 2 3 4 5 Displaying: 2 3 4 5
Der Funktionsprototyp void displayNumbers(int num[2][2]) deklariert ein 2×2-Integer-Array. Beim Funktionsaufruf übergeben wir einfach num; der Compiler handhabt die Zeigerkonvertierung automatisch.
Beachten Sie, dass Sie die Zeilendimension weglassen können, die Spaltengröße jedoch angeben müssen: int num[][2] ist gültig, während die Spaltengröße für die Adressberechnung essenziell ist.
Wichtig: C erlaubt das Übergeben von Arrays an Funktionen, unterstützt jedoch nicht das direkte Zurückgeben von Arrays aus Funktionen. Verwenden Sie Zeiger oder Strukturen, wenn Sie komplexe Daten zurückgeben müssen.
C Sprache
- C# Arrays meistern: Deklaration, Initialisierung und Operationen
- C Datentypen erklärt: int, float, char und mehr – Ein vollständiger Leitfaden
- Python pass-Statement meistern: Praxisleitfaden
- Python-Funktionsargumente meistern: Positional, Keyword & Default-Parameter
- Python Closures erklärt: Wie verschachtelte Funktionen Variablen erfassen
- Effiziente Speichernutzung mit C-Bitfeldern
- Datei-I/O in C meistern: Erstellen, Öffnen & Verwalten von Dateien
- Variable Argumente in C meistern: Ein praktischer Leitfaden
- Polymorphie in C++: Praktischer Leitfaden
- C# Methoden: Definieren, Aufrufen, Rekursion & Parameterübergabe