Arrays als Funktionargumente in C übergeben

Hallo da draußen, zukünftiger Codingsuperstar! ? Heute machen wir uns auf eine aufregende Reise durch die Welt der Arrays und Funktionen in C. Als dein freundlicher Nachbarschaftsinformatiklehrer bin ich hier, um dich Schritt für Schritt durch dieses Abenteuer zu führen. Also pack deinen virtuellen Rucksack und tauchen wir ein!

C - Passing Arrays to Function

Verständnis von Arrays und Funktionen

Bevor wir in das Übergeben von Arrays an Funktionen einsteigen, lassen wir uns schnell an das Erinnern, was Arrays und Funktionen sind.

Was ist ein Array?

Stelle dir ein Array wie eine Reihe von Schließfächern in einem Schulflur vor. Jedes Schließfach (Element) hat eine Nummer (Index) und kann etwas darin lagern. In C verwenden wir Arrays, um mehrere Elemente desselben Typs in einer einzigen Variablen zu speichern.

Was ist eine Funktion?

Eine Funktion ist wie ein Mini-Programm innerhalb unseres Hauptprogramms. Es ist ein Satz von Anweisungen, der eine bestimmte Aufgabe ausführt. Denke daran wie eine Rezeptkarte in einem Kochbuch – du kannst sie immer verwenden, wenn du diese spezielle Aufgabe ausführen musst.

Nun, da wir unsere Grundlagen abgedeckt haben, lassen uns diese beiden Konzepte kombinieren!

Arrays als Funktionargumente übergeben

In C können wir Arrays auf verschiedene Weisen an Funktionen übergeben. Sehen wir uns jede Methode nacheinander an.

1. Array mit dem Call-by-Value-Verfahren übergeben

In C, wenn wir ein Array an eine Funktion übergeben, geben wir tatsächlich die Adresse des ersten Elements des Arrays weiter. Das bedeutet, dass jede Änderung, die im Inneren der Funktion am Array vorgenommen wird, das ursprüngliche Array beeinflusst.

Sehen wir uns ein Beispiel an:

#include <stdio.h>

void printArray(int arr[], int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}

int main() {
int myArray[] = {1, 2, 3, 4, 5};
int size = sizeof(myArray) / sizeof(myArray[0]);

printf("Original array: ");
printArray(myArray, size);

return 0;
}

In diesem Beispiel geben wir myArray an die printArray-Funktion weiter. Obwohl es so aussieht, als ob wir das gesamte Array übergeben, übergeben wir tatsächlich einen Zeiger auf das erste Element.

Ausgabe:

Original array: 1 2 3 4 5

2. Array mit dem Call-by-Reference-Verfahren übergeben

In C werden Arrays immer per Referenz übergeben. Das bedeutet, dass wenn du ein Array an eine Funktion übergibst, du tatsächlich einen Zeiger auf das erste Element des Arrays übergibst.

Sehen wir uns ein Beispiel an, bei dem wir das Array innerhalb der Funktion ändern:

#include <stdio.h>

void doubleElements(int arr[], int size) {
for (int i = 0; i < size; i++) {
arr[i] *= 2;
}
}

int main() {
int myArray[] = {1, 2, 3, 4, 5};
int size = sizeof(myArray) / sizeof(myArray[0]);

printf("Original array: ");
for (int i = 0; i < size; i++) {
printf("%d ", myArray[i]);
}
printf("\n");

doubleElements(myArray, size);

printf("Modified array: ");
for (int i = 0; i < size; i++) {
printf("%d ", myArray[i]);
}
printf("\n");

return 0;
}

In diesem Beispiel verändert die doubleElements-Funktion das ursprüngliche Array, indem sie jedes Element verdoppelt.

Ausgabe:

Original array: 1 2 3 4 5
Modified array: 2 4 6 8 10

3. Zweidimensionales Array an eine Funktion übergeben

Nun erhöhen wir die Schwierigkeit und sprechen über das Übergeben von 2D-Arrays an Funktionen. Es ist, als ob man eine ganze Tabelle anstelle einer einzigen Zeile weitergibt!

Hier ist ein Beispiel:

#include <stdio.h>

void print2DArray(int rows, int cols, int arr[rows][cols]) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
}

int main() {
int myArray[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};

printf("My 2D Array:\n");
print2DArray(3, 3, myArray);

return 0;
}

In diesem Beispiel geben wir ein 2D-Array an die print2DArray-Funktion weiter. Beachte, wie wir die Dimensionen im Funktionsparameter angeben.

Ausgabe:

My 2D Array:
1 2 3
4 5 6
7 8 9

4. Funktion zum Vergleichen von Stringlängen

Last but not least schauen wir uns an, wie wir Strings (die im Wesentlichen Zeichenarrays sind) an Funktionen übergeben können. Wir erstellen eine Funktion, die die Längen von zwei Strings vergleicht.

#include <stdio.h>
#include <string.h>

int compareStringLengths(char str1[], char str2[]) {
int len1 = strlen(str1);
int len2 = strlen(str2);

if (len1 > len2) return 1;
if (len1 < len2) return -1;
return 0;
}

int main() {
char string1[] = "Hello";
char string2[] = "World!";

int result = compareStringLengths(string1, string2);

if (result > 0) {
printf("%s ist länger als %s\n", string1, string2);
} else if (result < 0) {
printf("%s ist länger als %s\n", string2, string1);
} else {
printf("%s und %s haben die gleiche Länge\n", string1, string2);
}

return 0;
}

In diesem Beispiel geben wir zwei Strings an die compareStringLengths-Funktion weiter, die 1 zurückgibt, wenn der erste String länger ist, -1, wenn der zweite String länger ist, und 0, wenn sie die gleiche Länge haben.

Ausgabe:

World! ist länger als Hello

Fazit

Glückwunsch! Du hast deine C-Programmierfähigkeiten durch das Lernen, wie man Arrays an Funktionen übergibt, verbessert. Denke daran, Übung macht den Meister, also zögere nicht, diese Konzepte in deinen eigenen Programmen auszuprobieren.

Hier ist eine kurze Referenztabelle der von uns besprochenen Methoden:

Methode Beschreibung
Array mit Call-by-Value übergeben Übergibt die Adresse des ersten Elements
Array mit Call-by-Reference übergeben Immer per Referenz in C
2D-Array übergeben Erfordert die Angabe der Dimensionen im Funktionsparameter
Strings übergeben Kann verwendet werden, um Strings zu manipulieren oder zu vergleichen

Weiter codieren, weiter lernen und vor allem weiter Spaß haben! ??

Credits: Image by storyset