Menu
Coddy logo textTech

Arrays an Funktionen übergeben

Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 29 von 63.

Wenn Sie ein Array an eine Funktion in C übergeben, passiert hinter den Kulissen etwas Interessantes. Das Array selbst wird nicht wirklich an die Funktion kopiert. Stattdessen wird ein Zeiger auf das erste Element des Arrays übergeben.

Das bedeutet, dass wenn Sie einen Funktionsparameter wie int arr[] oder int *arr schreiben, beide gleichwertig sind – beide stellen einen Zeiger auf das erste Element des Arrays dar. Die Funktion erhält die Speicheradresse, an der das Array beginnt, was ihr direkten Zugriff auf die Daten des ursprünglichen Arrays ermöglicht.

void printArray(int arr[], int size) {
    // arr ist eigentlich ein Zeiger auf das erste Element
    // Die Funktion kann auf das ursprüngliche Array zugreifen und es ändern
}

Da die Funktion mit dem Speicherort des ursprünglichen Arrays arbeitet und nicht mit einer Kopie, wirken sich alle innerhalb der Funktion vorgenommenen Änderungen auf das ursprüngliche Array aus. Dies unterscheidet sich von der Übergabe einzelner Variablen, bei der Kopien erstellt werden.

Sie werden auch feststellen, dass Sie die Größe des Arrays als separaten Parameter übergeben müssen, da die Funktion die Länge des Arrays nicht allein aus dem Pointer bestimmen kann.

challenge icon

Aufgabe

Einfach

Schreiben Sie ein C-Programm, das die Übergabe von Arrays an Funktionen demonstriert, indem Sie eine Funktion erstellen, die Temperaturdaten verarbeitet. Ihr Programm sollte:

  1. Erstellen Sie eine Funktion namens analyzeTemperatures, die ein Integer-Array und dessen Größe als Parameter entgegennimmt
  2. Berechnen und geben Sie innerhalb der Funktion analyzeTemperatures die Durchschnittstemperatur mit genau einer Dezimalstelle im Format Average temperature: [value] aus
  3. Finden und geben Sie innerhalb der Funktion analyzeTemperatures die höchste Temperatur im Format Highest temperature: [value] aus
  4. Zählen Sie innerhalb der Funktion analyzeTemperatures, wie viele Temperaturen über 25 Grad liegen, und geben Sie die Anzahl im Format Days above 25 degrees: [count] aus
  5. Lesen Sie in der Funktion main eine Ganzzahl n ein, die die Anzahl der Temperaturmessungen darstellt
  6. Lesen Sie n Temperaturwerte ein und speichern Sie diese in einem Integer-Array
  7. Rufen Sie die Funktion analyzeTemperatures auf und übergeben Sie das Array und seine Größe

Ihr Programm sollte die Temperaturdaten verarbeiten und die Analyseergebnisse anzeigen. Wenn die Eingabe zum Beispiel wie folgt aussieht:

5
20 28 15 32 26

Ihre Ausgabe sollte wie folgt aussehen:

Average temperature: 24.2
Highest temperature: 32
Days above 25 degrees: 3

Diese Herausforderung zeigt, wie Arrays als Zeiger auf ihr erstes Element an Funktionen übergeben werden, sodass die Funktion auf alle Elemente des ursprünglichen Arrays zugreifen und diese verarbeiten kann, ohne eine Kopie zu erstellen.

Spickzettel

Beim Übergeben von Arrays an Funktionen in C wird das Array selbst nicht kopiert. Stattdessen wird ein Zeiger auf das erste Element übergeben.

Sowohl int arr[] als auch int *arr sind gleichwertige Funktionsparameter – sie repräsentieren einen Zeiger auf das erste Element:

void printArray(int arr[], int size) {
    // arr ist eigentlich ein Zeiger auf das erste Element
    // Die Funktion kann auf das ursprüngliche Array zugreifen und es ändern
}

Wichtige Punkte:

  • Funktionen erhalten die Speicheradresse, an der das Array beginnt
  • Innerhalb der Funktion vorgenommene Änderungen wirken sich auf das ursprüngliche Array aus
  • Die Array-Größe muss als separater Parameter übergeben werden, da die Funktion die Länge nicht allein aus dem Zeiger bestimmen kann

Probier es selbst

#include <stdio.h>

// TODO: Erstellen Sie hier die Funktion analyzeTemperatures

int main() {
    // Anzahl der Temperaturmessungen einlesen
    int n;
    scanf("%d", &n);
    
    // Array zum Speichern der Temperaturen deklarieren
    int temperatures[n];
    
    // Temperaturwerte einlesen
    for (int i = 0; i < n; i++) {
        scanf("%d", &temperatures[i]);
    }
    
    // TODO: Rufen Sie hier die Funktion analyzeTemperatures auf
    
    return 0;
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logic & Flow