Pointer und Speicher

Mehrdimensionale Arrays

Eingebaute zweidimensionale Arrays liegen in beiden Sprachen zusammenhängend im row-major-Format.

Was ist Mehrdimensionale Arrays?

Eingebaute zweidimensionale Arrays liegen in beiden Sprachen zusammenhängend im row-major-Format.

Durchlaufe eine zeilenweise gespeicherte Matrix.

Wichtige Punkte

  • Jeder Pointer verweist auf ein lebendes kompatibles Objekt oder ist null.
  • Jede eigene Allokation wird genau einmal freigegeben.
  • Formuliere Ownership und const-Schnittstellen eindeutig.

Codebeispiele in C und C++

C
Code ausführen →
main.c
#include <stdio.h>

int main(void) {
    int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
    for (int row = 0; row < 2; ++row) {
        int total = 0;
        for (int column = 0; column < 3; ++column) total += matrix[row][column];
        printf("row %d=%d\n", row, total);
    }
    return 0;
}
Erwartete Ausgabe
row 0=6
row 1=15
C++
Code ausführen →
main.cpp
#include <array>
#include <iostream>

int main() {
    std::array<std::array<int, 3>, 2> matrix{{{{1, 2, 3}}, {{4, 5, 6}}}};
    for (std::size_t row = 0; row < matrix.size(); ++row) {
        int total = 0;
        for (int value : matrix[row]) total += value;
        std::cout << "row " << row << '=' << total << '\n';
    }
}
Erwartete Ausgabe
row 0=6
row 1=15

Vergleich zwischen C und C++

Eine C-Funktion muss alle Dimensionen außer der ersten kennen; std::array bewahrt Dimensionen im Typ und bietet at für Bounds-Prüfung.

C

Ownership und Aufräumen sind vom Programmierer durchgesetzte Konventionen.

C++

Container und RAII kodieren Ownership und Aufräumen in Objektlebenszeiten.

Übungsaufgaben

Führe beide Versionen aus und untersuche die unterschiedlichen Garantien.

  • Teste null und Allokationsfehler.
  • Verwende AddressSanitizer und UndefinedBehaviorSanitizer.
  • Dokumentiere Besitz jedes Pointers.